5

Android 7.0 Nougat 添加了 Data Saver 功能,允许用户限制某些应用程序的后台数据(包括推送通知)。当流量节省程序开启时,只有列表中的应用程序在

设置 → 数据保护程序 → 不受限制的数据访问

允许接收推送通知并执行后台网络调用。如果数据保护程序关闭并且您的应用程序不在不受限制的列表中,这很像禁用推送通知。

我的应用程序中有一个用例,它正在等待推送通知的到来。

我想知道是否有办法查明数据保护程序是否已启用,以及我的应用程序是否在“不受限制的数据访问”列表中,以了解是否为我的应用程序启用了推送通知,因此是否有必要等待推送并有机会在应用程序在特定时间处于后台时执行任何网络调用。

4

1 回答 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()是否应该限制数据使用,无论是否启用或禁用数据保护程序,或者您的应用程序是否被列入白名单。

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

于 2017-04-13T11:44:23.350 回答