Android 检查应用程序是否已启用电池优化

Android 检查应用程序是否已启用电池优化,android,powermanager,android-powermanager,Android,Powermanager,Android Powermanager,安卓6和7有一些电源优化(打瞌睡模式),当设备未使用时,限制应用程序联网 用户可以在电池设置中禁用任何应用程序的优化模式: 是否可以检查我的应用程序是否启用了优化?我需要要求用户禁用优化以获得更好的应用程序功能,但我不知道如何通过编程进行检查。这一项有点难以追踪:以下是您要查找的内容 如何在Kotlin中书写此内容 检查是否启用了优化 /** *如果应用程序中的电池设置“未优化”,则返回true;如果“优化电池使用”,则返回false */ 乐趣在于gnoringbatteryooptimiz

安卓6和7有一些电源优化(打瞌睡模式),当设备未使用时,限制应用程序联网

用户可以在电池设置中禁用任何应用程序的优化模式:


是否可以检查我的应用程序是否启用了优化?我需要要求用户禁用优化以获得更好的应用程序功能,但我不知道如何通过编程进行检查。

这一项有点难以追踪:以下是您要查找的内容


如何在Kotlin中书写此内容

  • 检查是否启用了优化
  • /**
    *如果应用程序中的电池设置“未优化”,则返回true;如果“优化电池使用”,则返回false
    */
    乐趣在于gnoringbatteryooptimizations(上下文:context):布尔值{
    val pwrm=context.applicationContext.getSystemService(context.POWER\u服务)作为PowerManager
    val name=context.applicationContext.packageName
    if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){
    返回pwrm.isIgnoringBatteryOptimizations(名称)
    }
    返回真值
    }
    
  • 检查是否启用优化,打开优化
    活动
  • fun checkBattery(){
    如果(!isIgnoringBatteryOptimizations()&&Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M){
    val name=resources.getString(R.string.app_name)
    Toast.makeText(applicationContext,“电池优化->所有应用->$name->不优化”,Toast.LENGTH\u LONG.show()
    val intent=intent(设置。操作\u忽略\u电池\u优化\u设置)
    星触觉(意图)
    }
    }
    
    示例代码:

     PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (pm != null && !pm.isIgnoringBatteryOptimizations(getPackageName())) {
                        askIgnoreOptimization();
                    } else {
                       // already ignoring battery optimization code here next you want to do
                    }
                } else {
               // already ignoring battery optimization code here next you want to do
                }
    
    声明静态变量

    private static final int IGNORE_BATTERY_OPTIMIZATION_REQUEST = 1002;
    
    显示电池优化对话框

     private void askIgnoreOptimization() {
    
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, IGNORE_BATTERY_OPTIMIZATION_REQUEST);
            } else {
                openNextActivity();
            }
        }
    
    还需要添加对清单文件的权限,即如下所示

    <uses-permission  android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    
    
    

    也许这段代码对你有帮助

    在您的清单中添加此权限。

    <uses-permission  android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    

    如果您想让用户翻转它:这是否也适用于制造商改进的ROM,还是仅适用于Nexus/Pixel/A1版本?@EfiMK我无法进行全面测试,但我可以确认
    PowerManager.isIgnoringBatteryOptimizations()
    方法在三星和华为设备上有效。我想说它可用于任何制造商的ROM。为什么“>=VERSION\u code.LOLLIPOP\u MR1”?安卓M中添加了操作\忽略\电池\优化\设置。感谢分享完整的解决方案。工作起来很有魅力!你需要第二部分的许可才能工作注意,除非你的应用满足此处的要求,否则不允许要求用户将你的应用列入白名单:是的,它工作得很好:D但唯一的问题是,该应用将被playstore拒绝,你将失去所有业务@RohitTP能否请您详细说明为什么在应用程序中添加此检查会使其成为PlayStore拒绝的候选项?我猜,正如我所检查的。如果只想检查电池优化并向用户显示消息,则不需要在清单中添加权限。@sud007“操作\请求\忽略\电池\优化”是一种危险的权限。谷歌不喜欢在应用程序的代码()中有这样的内容。这个权限和操作有点危险,因为如果我们添加它,我们允许应用程序直接显示一个android弹出窗口,要求用户关闭此应用程序的电池优化。相反,你应该做的是设置“ACTION\u IGNORE\u BATTERY\u OPTIMIZATION\u SETTINGS”(操作\忽略\电池\优化\设置),它将用户带到应用列表中,用户必须在其中搜索你的应用并手动禁用电池优化。@RohitTP Yes buddy我检查了所有相关细节,了解了重力,因此添加了我的第二条评论。无论如何,谢谢!:)非常感谢!:)
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Intent intent = new Intent();
            String packageName = getPackageName();
            PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
            if (!pm.isIgnoringBatteryOptimizations(packageName)) {
                intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + packageName));
                startActivity(intent);
            }
        }