Java 如何知道android手机上是否启用了数据保护程序

Java 如何知道android手机上是否启用了数据保护程序,java,android,kotlin,android-datasaver,Java,Android,Kotlin,Android Datasaver,我知道有一些类似的问题, ConnectionManager.getRestrictBackgroundStatus()将告诉我是否已禁用应用程序的后台数据 对于我的用例,我想知道是否所有应用都启用了数据保护程序 设置->数据保存->限制背景数据 或特定应用程序背景数据被禁用 应用程序名称->信息->网络->禁用背景数据 ConnectionManager.getRestrictBackgroundStatus()在这两种情况下都会给出相同的答案,我如何知道启用了哪个特定设置 自从安卓棒棒糖之后

我知道有一些类似的问题,
ConnectionManager.getRestrictBackgroundStatus()
将告诉我是否已禁用应用程序的后台数据

对于我的用例,我想知道是否所有应用都启用了数据保护程序

设置->数据保存->限制背景数据

或特定应用程序背景数据被禁用

应用程序名称->信息->网络->禁用背景数据


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

自从安卓棒棒糖之后,我们有了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();
}

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

如果Data Saver已启用,且您的应用程序未被列入白名单,则推送通知将仅在应用程序位于前台时发送

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


完成文档中的示例,您还可以学习如何申请白名单权限并听取对数据保存器首选项的更改。

数据保存模式和电源保存模式不是两件不同的事情吗?嗨,拉维,我想您没有明白我的问题,请仔细阅读。我已经在其他帖子中看到了你提到的答案。为了澄清我的问题,可以通过两种方式禁用应用程序背景数据,一种是数据保存,另一种是通过进入appInfo并禁用特定应用程序的背景数据,我想知道启用了哪种设置。通过connMgr.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;
  }
}