安卓6.0以后忽略电池优化

 安卓一个永恒的话题“进程保活”,想要仅仅从代码层面让你的app保活,基本是不可能的,必须还要配合很多用户的操作。当然能编译系统源码的大佬就当我没说。而代码层面要做的事也很多,什么startForeground,传说中的1像素大法,双service互相拉起,还有就是本文要说的针对安卓6.0之后要做的一件事,忽略电池优化,也有叫添加电池优化白名单。做法很简单,就两步:

一、声明权限

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

二、添加申请代码

 public void ignoreBatteryOptimization(Activity activity) {

        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            //  判断当前APP是否有加入电池优化的白名单,如果没有,弹出加入电池优化的白名单的设置对话框。
            if (!powerManager.isIgnoringBatteryOptimizations(activity.getPackageName())) 
  {
                Intent intent = new 
                Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + activity.getPackageName()));
                //跳转之前判断intent是否存在,否则有的机型会报找不到activity
                if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(intent, BATTERY_REQUEST);
                }else{
                    //TODO
                }
            } else {
                //TODO
            }
        } else {
            //TODO
        }


    }

需要注意的是其中跳转之前intent.resolveActivity(getPackageManager()) != null这个判断不能忘了,因为并不是所有的6.0系统都有这么个功能,如果不加这一句,有的机型就会报找不到activity,报错,闪退,很危险。关于resolveActivity大家可以百度下,还有其它替代方法。我也是因为上线后客户反馈才加上这句的,所以记录下。

猜你喜欢

转载自blog.csdn.net/xiaoxiong1989821/article/details/89335038