首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android 12电池优化

Android 12电池优化
EN

Stack Overflow用户
提问于 2022-02-06 05:07:07
回答 1查看 1.6K关注 0票数 5

我正试图检查Android12是否正在优化我的应用程序电池使用,所以我使用了isIgnoringBatteryOptimizations方法( https://developer.android.com/reference/android/os/PowerManager#isIgnoringBatteryOptimizations(java.lang.String) )。但是isIgnoringBatteryOptimizations返回一个布尔值作为,它是优化的,而Android12有三个级别的优化(查看屏幕截图):

  1. Unrestricted
  2. Optimized
  3. Restricted

我的应用程序在1和2的情况下运行良好,如果它处于限制的模式,我想显示警告。

EN

回答 1

Stack Overflow用户

发布于 2022-05-20 22:46:02

经过一些研究后,许多其他帖子试图通过实现以下代码来解决这个问题:

在宣言中添加:

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

使用此函数请求优化:

代码语言:javascript
运行
复制
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才是真实的。从这一点来看,谷歌不会对这种方法很满意,而且你的应用程序可能不会发布。

我发现了以下更方便的工作方法:

代码语言:javascript
运行
复制
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种情况。希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71004344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档