Android 7.0 Nougat添加了Data Saver功能,允许用户限制某些应用的背景数据(包括推送通知)。当Data Saver为ON时,只有列表中的应用程序在
中找到允许设置→数据保护→无限制数据访问
接收推送通知并执行后台网络呼叫。 如果Data Saver处于关闭状态且您的应用不在非限制列表中,则与设置推送通知非常相似。
我的应用中有一个用例正在等待推送通知。
我想知道是否有办法找出数据保护程序是否已启用,如果我的应用程序处于“不受限制的数据访问”状态,则可能会出现这种情况。列表,以了解是否为我的应用程序启用了推送通知,因此,如果在应用程序在特定时间处于后台时等待推送并有机会执行任何网络呼叫,则会显示。
答案 0 :(得分:6)
检查数据保护程序是否已启用,以及您的应用是否可以通过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()
是否应限制数据使用,无论是启用了数据保护程序还是禁用了数据保护程序,或者您的应用是否已列入白名单。
完整示例in the docs,您还可以在其中了解如何请求白名单权限并聆听对数据保护程序首选项的更改。