随着 Android 开发的越来越规范,那些“黑科技”的保活手段基本没什么用了,所以只能通过引导,让用户自己去设置相关保活的选项,就像 Rom 的白名单。只不过白名单是系统帮你设置,没有白名单就得自己去引导了。保活相关的一般包含自启动和防睡眠,当然功能在各个 Rom 的描述不尽相同,不用纠结于此。
针对各大厂商,做了一些准备工作,如下。
三星
- Galaxy S10+:SM-G9750,Android 9
- Galaxy Note8:SM-N9500,Android 8.0.0
- Galaxy Note9:SM-N9600,Android 8.1.0
- C7:Android 8,Sumsang Experience 版本
- S8:Android 8,Sumsang Experience 版本(没有自启动)
智能管理器->电池->未监视的应用程序->添加应用程序:添加后,应用处于后台时系统不会休眠应用
智能管理器->自动运行应用程序:打开允许后,若应用后台一段时间未使用,仍有可能自动停止
小米
- 小米 MIX2:Android 9,MIUI 10.4.2
- 红米 NOTE7 Pro:Android 9
设置->授权管理->自启动管理->运行应用自启动
设置->电量和性能->应用配置->设置应用的省电策略为无限制
vivo
- X9:Android 6.0.1,Funtouch OS_3.0
- Y75A:Android 7.1.1,Funtouch OS_3.2
- X21:Android 8.1.0,Funtouch OS_4.0
- iQOO:Android 9,Funtouch OS_9
- NEXS:Android 10,Funtouch OS_10 开发板
设置->更多设置->权限管理->权限Tab->自启动
设置->电池->后台高耗电->打开开关允许应用高耗电时继续允许
- X6A:Android 5.0.2,Funtouch OS_2.5
i 管家->软件管理->权限管理->自启动管理
i 管家->省电管理->后台高耗电->打开开关允许应用高耗电时继续允许
oppo
- A73:Android 7.1.1,ColorOS v5.2.1
手机管家->权限隐私->自启动管理
设置->电池->应用速冻->关闭速冻开关
oppo 云测平台需要开发者账号,还要银行卡、手持身份证等玩意,太麻烦,就没申请了,所以 oppo 看的比较少。
华为
- Mate 9:Android 9,EMUI 9.1.0
- P10:Android 9,EMUI 9.1.0
设置->应用->应用启动管理->关闭自动管理,允许自启动,后台活动
设置->电池->更多电池设置->?(云真机显示的没有应用,不确定是否有开关)
- P10 Plus:Android 8.0,EMUI 8.0
手机管家->自启管理->允许自启动
设置->电池->耗电排行->选中应用进入耗电详情->关闭高耗电提醒
- Mate 9:Android 7.0,EMUI 5.0
手机管家->自启管理->允许自启动
设置->电池->设置(右上角图标)->锁屏应用清理->关闭清理选项
代码
只看了几个主流平台,其实还想看看一加的,但是一加没找到云测平台,也没有一加真机,无奈作罢。下面上代码:
1 | object KeepCompactUtil { |
直接罗列所有的 Intent,按页面相关性从大到小排列。比如,A->B->C,设置页面在 C,但是有的手机不支持打开 C 和 B,Intent 排序为 C>B>A。通过 resolveActivity 判断系统是否能处理此 Intent,跳转成功则 ok,若跳转失败则继续遍历,找到能跳转的 Intent,如果遍历完也没有找到,则返回 false 给出相应提示。
小结
oppo vivo 的手机有点恶心,每次安装 debug 包还要弹窗让输密码,然后还自己捣鼓了权限啥的,限制三方应用进行跳转。
vivo:
1 | Permission Denial: starting Intent { flg=0x10000000 cmp=com.vivo.abe/com.vivo.applicationbehaviorengine.ui.ExcessivePowerManagerActivity } from ProcessRecord{306679b 16047:cn.xxx.android.xxx/u0a605} (pid=16047, uid=10605) requires com.vivo.abe.permission.action.openhpactivity |
oppo:
1 | java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.coloros.safecenter/.startupapp.StartupAppListActivity } from ProcessRecord{2255367 30192:cn.xxx.android.xxx/u0a697} (pid=30192, uid=10697) requires oppo.permission.OPPO_COMPONENT_SAFE |
然后在 AndroidManifest 中添加相关的权限也无效的,因为只能系统应用申请,三方应用申请没用(oppo 同学内部询问大佬给出的回答)。针对 vivo,我选择跳到上一级页面,也可以跳,只不过需要用户手动再点一下。针对 oppo,我佛了,上一级页面也跳不了,只能到最初的设置页面,这跳到设置页面大多数用户都会一脸懵逼,所以干脆不跳了,直接返回 false,同时给好相应的引导。同时,申请了权限之后,好像 apk 安装会出问题(部分机型),反正没用,所以权限就不要加了。
三星也值得说一下,一会是 sm,一会是 sm_cn,我也是佛了。一会是 ui.battery,一会是 battery.ui,索性直接进行排列组合搞了一波,所以三星的 Intent 就很多了。另外三星 S9 貌似是没有自启动的,所以可以考虑进行屏蔽。其实不屏蔽影响也不大,返回 false 给出提示即可,无奈老板的手机是 S9…
经过这次云测平台的使用,发现华为还是牛逼啊,三星也还不错,还支持 adb 命令(点个赞)。oppo vivo 就差太远了,小米更不用谈了,连可用的机型都没有。腾讯的 WeTest 机型倒是都有,但是要收费,这很腾讯。送的 30 分钟完全不够用好吗,而且每用一个机型至少 15 分钟,我的免费额度剩下 10 分钟就已经用不了了,无力吐槽。