如何以编程方式获取用户在Android OS配置上设置的数据使用限制?

时间:2014-06-23 12:31:31

标签: android android-download-manager network-traffic user-preferences android-settings

用户可以在“数据使用情况”屏幕上定义移动数据使用的限制和/或警告限制。那么如何通过代码获取此信息呢?

本机操作系统的数据使用配置屏幕。

Data usage OS system configuration screen

我想要极限值和警告值。

我已经尝试过但不能正常工作,并且总是向两者都返回NULL:

final Long recommendedBytes = DownloadManager.getRecommendedMaxBytesOverMobile( this.context );
final Long maximumBytes = DownloadManager.getMaxBytesOverMobile( this.context );

// recommendedBytes and maximumBytes are NULL

并且TrafficStats类只传输数据而不是限制。

2 个答案:

答案 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   处理惰性映射的新值的内部类。该   protectedSettings.Secure Settings.System方法调用{{1}}   和{{1}}内部类(putStringSecure的调用   System)。

     

所以我可以得出结论,如果操作系统实现没有放置thoose String值,我就无法得到它们。

<强> 2。 TrafficStats

  

快速查看官方参考我可以注意到它会   不帮我,因为这个类只提供了字节数量   自上次设备启动以来被贩运的软件包。

     

http://developer.android.com/reference/android/net/TrafficStats.html

第3。 NetworkPolicyManager and NetworkPolicy

  

由于@bina发布了here,这两个类都被隐藏了,但却没有   正常的应用程序使用,例如该广告将在Google Play中发布。

     

https://stackoverflow.com/a/24445424/575643

<强> 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类是隐藏类)