AVE*_*imi 11 optimization android battery android-powermanager android-12
我正在尝试检查 Android 12 是否正在优化我的应用程序电池使用情况,因此我使用了 isIgnoringBatteryOptimizations方法( https://developer.android.com/reference/android/os/PowerManager#isIgnoringBatteryOptimizations(java.lang.String))。但是isIgnoringBatteryOptimizations返回一个布尔值yes,它已经过优化,而 Android 12 有 3 个级别的优化(查看屏幕截图):
我的应用程序在 1 和 2 的情况下工作正常,我想在受限模式下显示警告。
经过一些研究,许多其他帖子尝试通过执行以下代码来解决这个问题:
添加到清单:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
Run Code Online (Sandbox Code Playgroud)
使用此函数来请求优化:
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);
}
Run Code Online (Sandbox Code Playgroud)
正如您在帖子中提到的,isIgnoringBatteryOptimizations 仅在情况 1 中才为真。除此之外,Google 似乎对这种方法不太满意,您的应用程序可能不会发布。
我发现以下方法可以更方便地工作:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果您想查找情况 3,则此代码有效。请考虑情况 3 仅与 Android API 28 及更高版本相关,当 API < 28 时应用程序不应在后台被终止,当 API < 28 时不存在情况 3 。 希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
5263 次 |
| 最近记录: |