有没有办法知道是否启用了 Data Saver?
Is there a way to know if Data Saver is enabled?
Android 7.0 Nougat 添加了 Data Saver 功能,允许用户限制某些应用程序(包括推送通知)的后台数据。当流量节省程序开启时,只有列表中的应用程序在
中找到
Settings → Data Saver → Unrestricted data access
可以接收推送通知和执行后台网络调用。
如果 Data Saver 关闭并且您的应用程序不在不受限制的列表中,这几乎就像设置禁用推送通知一样。
我的应用程序中有一个用例,它正在等待推送通知的到来。
我想知道是否有办法查明是否启用了 Data Saver 以及我的应用程序是否在 'Unrestricted data access' 列表中以了解是否为我的应用程序启用了推送通知以及是否有当应用程序在特定时间处于后台时,等待推送和执行任何网络调用的机会。
可以通过 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,您还可以在其中了解如何请求白名单权限以及监听对 Data Saver 首选项的更改。
Android 7.0 Nougat 添加了 Data Saver 功能,允许用户限制某些应用程序(包括推送通知)的后台数据。当流量节省程序开启时,只有列表中的应用程序在
中找到Settings → Data Saver → Unrestricted data access
可以接收推送通知和执行后台网络调用。 如果 Data Saver 关闭并且您的应用程序不在不受限制的列表中,这几乎就像设置禁用推送通知一样。
我的应用程序中有一个用例,它正在等待推送通知的到来。
我想知道是否有办法查明是否启用了 Data Saver 以及我的应用程序是否在 'Unrestricted data access' 列表中以了解是否为我的应用程序启用了推送通知以及是否有当应用程序在特定时间处于后台时,等待推送和执行任何网络调用的机会。
可以通过 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,您还可以在其中了解如何请求白名单权限以及监听对 Data Saver 首选项的更改。