如果为Android应用启用了“限制后台数据”,则以编程方式检测

时间:2016-06-27 17:11:48

标签: android background-process

我搜索了堆栈溢出,找不到为我的应用程序检测此设置的答案。在Android Marshmallow中,“设置”中有一个选项:

设置 - >数据使用 - >我的应用 - >切换“限制应用程序后台数据”,“禁用蜂窝网络上的后台数据”

我想警告用户是否在我的应用中设置了此项。如何检测是否为我的应用设置了此项。任何指针都赞赏。

2 个答案:

答案 0 :(得分:1)

根据Android 7.0开始的最新Android文档(API级别24)...

https://developer.android.com/training/basics/network-ops/data-saver.html

ConnectivityManager connMgr = (ConnectivityManager)
    getSystemService(Context.CONNECTIVITY_SERVICE);
// Checks if the device is on a metered network
if (connMgr.isActiveNetworkMetered()) {
  // Checks user’s Data Saver settings.
  switch (connMgr.getRestrictBackgroundStatus()) {
    case RESTRICT_BACKGROUND_STATUS_ENABLED:
    // Background data usage is blocked for this app. Wherever possible,
    // the app should also use less data in the foreground.

    case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
    // The app is whitelisted. Wherever possible,
    // the app should use less data in the foreground and background.

    case RESTRICT_BACKGROUND_STATUS_DISABLED:
    // Data Saver is disabled. Since the device is connected to a
    // metered network, the app should use less data wherever possible.
  }
} else {
  // The device is not on a metered network.
  // Use data as required to perform syncs, downloads, and updates.
}
  

监控对数据保护程序首选项的更改   应用程序可以通过创建BroadcastReceiver来监听对Data Saver首选项的更改,以侦听ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED并使用Context.registerReceiver()动态注册接收器。当应用程序收到此广播时,它应通过调用ConnectivityManager.getRestrictBackgroundStatus()来检查新的数据保护程序首选项是否影响其权限。

     

注意:系统仅将此广播发送给使用Context.registerReceiver()动态注册它们的应用程序。注册为在其清单中接收此广播的应用程序将不会收到它们。

答案 1 :(得分:0)

您可以使用getActiveNetworkInfo()

  

当后台数据不可用时,getActiveNetworkInfo()将立即生效   似乎已断开连接。

Reference

<强>供参考:

根据Android参考资料getBackgroundDataSetting

  

返回后台数据使用设置的值。如果是假的,   如果应用程序不在,则应用程序不应使用网络   前景。

然而,这在API级别14中已被弃用。