我知道有一些类似的问题,ConnectionManager.getRestrictBackgroundStatus()
会告诉我是否禁用了应用程序的后台数据。
对于我的用例,我想知道是否为所有应用程序启用了数据保护程序
设置->dataSaver->restrictBackgroundData
或特定应用程序后台数据被禁用
app_Name->Info->Network->disable_backgroundData
ConnectionManager.getRestrictBackgroundStatus()
在这两种情况下都会给我相同的答案,我如何知道启用了哪个特定设置?
可以通过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(),无论是否启用或禁用了数据保护程序,或者您的应用程序是否被列入白名单,是否都应该限制数据使用。
文档中的完整示例,您还可以了解如何请求白名单权限并听取对Data Saver首选项的更改。
由于我们的Android棒棒糖是PowerSaveMode(),下面是示例-
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();
}