有没有一种方法可以知道数据节省功能是否已启用?

5
安卓7.0版本的Nougat增加了“数据保护”功能,允许用户限制某些应用(包括推送通知)的后台数据。当“数据保护”开启时,只有在“设置 → 数据保护 → 允许使用未受限数据访问”的列表中的应用才能够接收推送通知和执行后台网络调用。如果“数据保护”关闭且您的应用不在未受限列表中,则可视为推送通知已被禁用。我的应用程序有一个使用案例,它正在等待推送通知的到来。我想知道是否有一种方法可以找出是否启用了“数据保护”,以及我的应用程序是否在“未受限制数据访问”列表中,以便知道是否启用了推送通知,因此是否有机会在特定时间内在应用程序处于后台时执行任何网络调用。
1个回答

8

通过 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()。
完整示例在文档中,您可以学习如何请求白名单权限并监听数据节省偏好的更改。 在这里查看

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接