0

我知道有一些与此类似的问题, ConnectionManager.getRestrictBackgroundStatus()会告诉我是否为我的应用禁用了后台数据。

对于我的用例,我想具体了解是否为所有应用启用了数据保护程序

设置->dataSaver->restrictBackgroundData

或特定应用后台数据被禁用

app_Name->Info->Network->disable_backgroundData

ConnectionManager.getRestrictBackgroundStatus()在这两种情况下都会给我相同的答案,我怎么知道启用了哪个特定设置?

4

2 回答 2

0

由于 Android Lollipop 我们有 isPowerSaveMode() ,这里是示例-

PowerManager powerManager = (PowerManager)
    getActivity().getSystemService(Context.POWER_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
        && powerManager.isPowerSaveMode()) {
    // Animations are disabled in power save mode, so just show a toast instead.
    Toast.makeText(mContext, getString(R.string.toast), Toast.LENGTH_SHORT).show();
}
于 2020-01-29T06:48:02.157 回答
0

可以通过 ConnectivityManager.getRestrictBackgroundStatus() 检查数据保护程序是否已启用以及您的应用是否被列入白名单

public boolean checkBackgroundDataRestricted() {
  ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

  switch (connMgr.getRestrictBackgroundStatus()) {
    case RESTRICT_BACKGROUND_STATUS_ENABLED:
    // Background data usage and push notifications are blocked for this app
    return true;

    case RESTRICT_BACKGROUND_STATUS_WHITELISTED: 
    case RESTRICT_BACKGROUND_STATUS_DISABLED:
    // Data Saver is disabled or the app is whitelisted  
    return false;
  }
}

如果启用了流量节省程序并且您的应用未列入白名单,则只有在您的应用处于前台时才会发送推送通知。

您还可以检查 ConnectivityManager.isActiveNetworkMetered() 如果您应该限制数据使用,无论是否启用或禁用数据保护程序,或者您的应用程序是否被列入白名单。

文档中的完整示例,您还可以在其中了解如何请求白名单权限并听取对数据保护程序首选项的更改。

于 2020-01-29T09:20:42.360 回答