如何知道android手机上是否启用了数据保护程序



我知道有一些类似的问题,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();
}

最新更新