关于华为EMUI4.0忽略电池优化失败的问题
2016-09-08 19:05
906 查看
android6.0引入了doze机制。忽略电池优化就相当于将应用加入了doze白名单。
通过下面的代码,调用系统的dialog,让用户做出选择。
但是,在华为EMUI4.0(android6.0)的手机上,会报ActivityNotFound异常,之前因为未加异常捕获,导致部分华为手机直接崩溃。导致问题的原因,估计是华为EMUI4.0修改了或者误改了电池优化的ACTION。
我找到了EMUI4.0和EMUI4.0的手机各一台(都是android6.0),发现设置-应用管理-高级-忽略电池优化页面都是有的,但是EMUI4.0无法通过设置action:ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS呼出dialog,也无法通过ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS打开对应设置页面。
对于这种情况,一般解决方法是,通过提示,让用户手动进入设置页面设置。
另外,我还测试了另外一种直接进入忽略电池优化页面的方法,思路是,通过包名打开设置,在通过指定component,进入相应页面,经测试,可行。但是,需要两个参数:1,“设置”的包名;2,忽略电池优化页面的类名。
查找设置的包名和对应页面的类名,有很多方法,我知道两种:1,adb shell dumpsys activity | grep “mFoc”; 2,打开一个页面时,查看logcat,从里面查找。我查到的包名是“com.android.settings”,类名是“com.android.com.settings.Settings@HighPowerApplicationsActivity”
然后,通过下面的代码,成功打开忽略电池优化页面:
——————–9月12日补充——————-
昨个突然想到,既然忽略电池优化的dialog是通过Intent呼出的,那么这个dialog应该是一个activity,但外观看起来是dialog。所以今天,找到上面测试的手机,打开忽略电池优化的dialog,通过adb查看发现,果然,就是一个activity。activity全名是:com.android.settings/.fuelgauge.RequestIgnoreBatteryOptimizations。通过设置componentName,应该可以打开,只是,需要忽略的应用的包名, 需要作为参数传递过去,像这样,intent.setData(Uri.parse(“package:” + packageName));因为时间问题,这一步没有验证,有空验证一下。
———-2017/02/21补充———-
阿里巴巴的云os没有忽略电池优化这项设置,同样会遇到这个问题。执行到startActivity方法,会抛出ActivityNotFoundException,可以添加异常捕获,也可以通过代码判断当前是否是阿里云os,跳过异常代码。判断系统是否是云os,参考:http://blog.csdn.net/u010209842/article/details/53743895。
通过下面的代码,调用系统的dialog,让用户做出选择。
Intent intent = new Intent(); intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName)); startActivity(intent);
但是,在华为EMUI4.0(android6.0)的手机上,会报ActivityNotFound异常,之前因为未加异常捕获,导致部分华为手机直接崩溃。导致问题的原因,估计是华为EMUI4.0修改了或者误改了电池优化的ACTION。
我找到了EMUI4.0和EMUI4.0的手机各一台(都是android6.0),发现设置-应用管理-高级-忽略电池优化页面都是有的,但是EMUI4.0无法通过设置action:ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS呼出dialog,也无法通过ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS打开对应设置页面。
对于这种情况,一般解决方法是,通过提示,让用户手动进入设置页面设置。
另外,我还测试了另外一种直接进入忽略电池优化页面的方法,思路是,通过包名打开设置,在通过指定component,进入相应页面,经测试,可行。但是,需要两个参数:1,“设置”的包名;2,忽略电池优化页面的类名。
查找设置的包名和对应页面的类名,有很多方法,我知道两种:1,adb shell dumpsys activity | grep “mFoc”; 2,打开一个页面时,查看logcat,从里面查找。我查到的包名是“com.android.settings”,类名是“com.android.com.settings.Settings@HighPowerApplicationsActivity”
然后,通过下面的代码,成功打开忽略电池优化页面:
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); // 设置ComponentName参数1:packagename参数2:Activity路径 ComponentName cn = new ComponentName(packageName, className); intent.setComponent(cn); startActivity(intent);
——————–9月12日补充——————-
昨个突然想到,既然忽略电池优化的dialog是通过Intent呼出的,那么这个dialog应该是一个activity,但外观看起来是dialog。所以今天,找到上面测试的手机,打开忽略电池优化的dialog,通过adb查看发现,果然,就是一个activity。activity全名是:com.android.settings/.fuelgauge.RequestIgnoreBatteryOptimizations。通过设置componentName,应该可以打开,只是,需要忽略的应用的包名, 需要作为参数传递过去,像这样,intent.setData(Uri.parse(“package:” + packageName));因为时间问题,这一步没有验证,有空验证一下。
———-2017/02/21补充———-
阿里巴巴的云os没有忽略电池优化这项设置,同样会遇到这个问题。执行到startActivity方法,会抛出ActivityNotFoundException,可以添加异常捕获,也可以通过代码判断当前是否是阿里云os,跳过异常代码。判断系统是否是云os,参考:http://blog.csdn.net/u010209842/article/details/53743895。
相关文章推荐
- 关于新建SQL Server注册失败的问题
- 关于sql数据库维护失败的问题查找方法
- 关于sql数据库维护失败的问题查找方法
- 关于RMI远程调用失败的问题
- 关于sql优化的问题-索引优化,索引的创建原则(转)
- 关于"建立空文档失败"的问题的分析
- 关于ENU OS加CHS VS2008出现包加载失败问题解决方法存档
- 关于MS SQLSERVER索引优化问题
- 关于创建socket失败的问题
- 关于visual assist安装失败的问题
- 关于"建立空文档失败"的问题的分析!(转载)
- 关于ISA2004内网卡网线拔插造成ISA代理失效问题的一种解决方法(下列错误而失败:0x80072
- 关于spring启动的优化的问题
- 关于"建立空文档失败"的问题的分析!
- 关于存储过程的参数和ASP优化问题
- 关于tomcat服务器优化,常遇到的一些简单问题的解决方法 (z)
- 关于解决sql server 2000安装失败的问题
- 关于安装.NET Framework 2.0时偶然碰到的问题(提示"Error 205015. 安装程序集..../System.EnterpriseServices.dll失败,原因是出现了系统错误:拒绝访问。")
- 关于企业网站优化的问题
- 关于华为设备与思科设备的兼容性问题