用户可以在“数据使用情况”屏幕上定义移动数据使用的限制和/或警告限制。那么如何通过代码获取此信息呢?
本机操作系统的数据使用配置屏幕。
我想要极限值和警告值。
我已经尝试过但不能正常工作,并且总是向两者都返回NULL:
final Long recommendedBytes = DownloadManager.getRecommendedMaxBytesOverMobile( this.context );
final Long maximumBytes = DownloadManager.getMaxBytesOverMobile( this.context );
// recommendedBytes and maximumBytes are NULL
并且TrafficStats类只传输数据而不是限制。
答案 0 :(得分:17)
经过几天的搜索和研究这个问题,我找不到答案。贝娄我将解除我所做的每一次尝试。
<强> 1。 Download Manager 强>
通过此课程,您可以通过任何网络或设备开始下载 状态,它将处理所有状态,例如网络丢失,设备重启, 等...
有两种方法称为
getMaxBytesOverMobile
和getRecommendedMaxBytesOverMobile
,他们是一个很好的候选人 第一次解决这个问题。但经过代码测试和 Download Manager implementantion研究我发现有 无法通过DownloadManager获取thoose值。<强>原因强>
Thoose方法用它们调用
Settings.Secure.getLong
各自的标签Settings.Secure.DOWNLOAD_MAX_BYTES_OVER_MOBILE
和Settings.Secure.DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE
in 转弯在里面调用一个懒惰的String
地图 内部类叫NameValueCache
。好到目前为止,但没有内部类或
Settings
实现它 自我使用DOWNLOAD_MAX_BYTES_OVER_MOBILE
或 内部DOWNLOAD_RECOMMENDED_MAX_BYTES_OVER_MOBILE
。我认为懒惰的地图是由第三个实体填充的 实际发生了,所以我找到了
NameValueTable
Settings
处理惰性映射的新值的内部类。该protected
是Settings.Secure
Settings.System
方法调用{{1}} 和{{1}}内部类(putString
和Secure的调用 System)。所以我可以得出结论,如果操作系统实现没有放置thoose String值,我就无法得到它们。
<强> 2。 TrafficStats 强>
快速查看官方参考我可以注意到它会 不帮我,因为这个类只提供了字节数量 自上次设备启动以来被贩运的软件包。
http://developer.android.com/reference/android/net/TrafficStats.html
第3。 NetworkPolicyManager and NetworkPolicy 强>
由于@bina发布了here,这两个类都被隐藏了,但却没有 正常的应用程序使用,例如该广告将在Google Play中发布。
<强> 4。 ConnectivityManager 强>
简而言之,您可以获得未提供的
NetworkInfo
关于用户偏好的很多信息(真的没有!)。只是提供 有关网络的信息,例如移动网络提供商。http://developer.android.com/reference/android/net/ConnectivityManager.html
毕竟我认为现在无法获得这些信息。如果你读了它,请找到一个方法发布在这里!
谢谢大家。
PS:对不起英文错误。
答案 1 :(得分:11)
在此示例中,您是否希望获得限制值(5GB)和警告值(2GB)?
如果是这样,如果可以使用android.permission.MANAGE_NETWORK_POLICY和android.permission.READ_PHONE_STATE,则可以通过以下代码获取limitBytes和warningBytes。
但是,android.permission.MANAGE_NETWORK_POLICY protectionLevel是签名。
NetworkPolicyManager manager = (NetworkPolicyManager) getSystemService("netpolicy");
NetworkPolicy[] networkPolicies = manager.getNetworkPolicies();
Log.d("NetworkPolicy", "limitBytes is " + networkPolicies[0].limitBytes);
Log.d("NetworkPolicy", "warningBytes is " + networkPolicies[0].warningBytes);
(NetworkPolicyManager和NetworkPolicy类是隐藏类)