After days searching and research about this problem I couldn't find a answer for that. Bellow I will lift every attempt that I did.
1. Download Manager
With this class you can start download over any network or device
state and it will handle all states e.g. network loss, device reboot,
etc...
There are two methods called getMaxBytesOverMobile
and
getRecommendedMaxBytesOverMobile
, they was a pretty candidate
to solve this problem at first time. But after code tests and
Download Manager implementantion research I'd found that there is
no way to get thoose values by DownloadManager.
Reason
Thoose methods call Settings.Secure.getLong
with they
respective labels
Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE
and
Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE
in
the turn makes a call to a lazy String
map inside inside a
inner class called NameValueCache
.
Ok so far but none of inner classes or Settings
implementation it
self use DOWNLOAD_MAX_BYTES_OVER_MOBILE
or
DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE
inside.
I considered the lazy map was populate by a third entity, what
actually happens, so I found the NameValueTable
Settings
inner class that handle the new values to lazy map. The
putString
is a protected
method call by Settings.Secure
and Settings.System
inner classes (calls of Secure and
System).
So I could conclude that if the OS implementantion do not put thoose String values I can't get them.
2. TrafficStats
Just a quick look on official reference I could notice that it will
not help me because this class just provide the amount of bytes and
packages that was trafficked since last device boot.
http://developer.android.com/reference/android/net/TrafficStats.html
3. NetworkPolicyManager and NetworkPolicy
As @bina posted here the both classes are hidden and could not
be use by normal apps e.g. that will be published in Google Play.
https://stackoverflow.com/a/24445424/575643
4. ConnectivityManager
In short, you just can get the NetworkInfo
that not provide
much information about user preferences (really none!). Just provide
informations about network and e.g. mobile network provider.
http://developer.android.com/reference/android/net/ConnectivityManager.html
After all I assume that no way to get this information nowadays. Please if you read it and found a way post here!
Thanks for all.
PS.: Sorry by english mistakes.