我正试图检查Android12是否正在优化我的应用程序电池使用,所以我使用了isIgnoringBatteryOptimizations方法( https://developer.android.com/reference/android/os/PowerManager#isIgnoringBatteryOptimizations(java.lang.String) )。但是isIgnoringBatteryOptimizations返回一个布尔值作为是,它是优化的,而Android12有三个级别的优化(查看屏幕截图):
我的应用程序在1和2的情况下运行良好,如果它处于限制的模式,我想显示警告。
发布于 2022-05-20 22:46:02
经过一些研究后,许多其他帖子试图通过实现以下代码来解决这个问题:
在宣言中添加:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
使用此函数请求优化:
PowerManager pm = (PowerManager) context.getSystemService(POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName))
{
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + "YOUR_PACKAGE_NAME"));
context.startActivity(intent);
}
正如你在这篇文章中提到的,只有在第一种情况下,isIgnoringBatteryOptimizations才是真实的。从这一点来看,谷歌不会对这种方法很满意,而且你的应用程序可能不会发布。
我发现了以下更方便的工作方法:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P)
{
ActivityManager am = (ActivityManager)getContext().getSystemService(Context.ACTIVITY_SERVICE);
Boolean isRestricted = am.isBackgroundRestricted();
if(isRestricted)
{
// Show some message to the user that app won't work in background and needs to change settings
//... (implement dialog)
// When user clicks 'Ok' or 'Go to settings', then:
openBatterySettings();
}
}
private void openBatterySettings()
{
Intent intent = new Intent();
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
getContext().startActivity(intent);
}
如果您想要找到案例3,请考虑到案例3只适用于Android 28及以后,当API < 28时,应用程序不应该在后台被杀死,当API < 28时,不应该有第3种情况。希望能帮上忙。
https://stackoverflow.com/questions/71004344
复制相似问题