正在做一个语音房功能。flutter 开发的,不太懂 android 原生。
目前测试机是小米 9 MIUI12.5 。
设置了 app 常驻后台,虽然不杀后台了。
但是锁屏一段时间后,语音房内的 websocket 和 webrtc 就都断了。
测试发现把“省电策略”设置“无限制”,就能正常锁屏,并保持语音通话了。
想问下,针对这个“省电策略”,开发者能做什么呢?
有 api 可以申请“无限制”?
或者直接向厂商申请?
1
psklf 2023-11-02 13:05:05 +08:00
开前台服务也不行吗?
|
2
shinsekai 2023-11-02 13:05:25 +08:00
有各种保活方法吧,比如一像素悬浮窗或者闹钟什么的
|
3
fredcc 2023-11-02 13:06:46 +08:00
小米系统:让用户自己选择,设置无限制耗电
|
4
CEBBCAT 2023-11-02 13:07:49 +08:00
你做了哪些研究呢?
|
5
vcn8yjOogEL 2023-11-02 13:07:54 +08:00
|
6
ysc3839 2023-11-02 13:20:44 +08:00 via Android
确定有做成前台服务(通知栏常驻)?我手头上的 MIUI ,那些有前台服务的 app ,即使设置成智能限制也是正常的。
|
7
Musong 2023-11-02 13:32:28 +08:00
自启动+省电无限制,李跳跳也没挂过
|
8
rokycool 2023-11-02 14:15:19 +08:00
小米有多重休眠;
1 基于云控的神隐模式, 2 后台管控的无限制 3 动作传感器+时间段 的所谓"自适应休眠" 建议你要不直接用 root 吧 |
9
as9567585 OP |
12
as9567585 OP @Musong 很久没有用 Android 了,也非 Android 开发,flutter 写的。
总是让用户自己去设置“省电模式”,感觉不太友好啊。 还是想问下专业的 Android 开发,有什么办法能在开发侧就处理了,不要麻烦用户。 |
13
as9567585 OP @vcn8yjOogEL 听说过知名的 app 都在系统的白名单里,这些小 app 怎么办呢,只能麻烦用户去设置省电模式了吗?
|
14
gam2046 2023-11-02 14:29:21 +08:00
尝试 acquireWakeLock 以及 WifiLock
|
15
vcn8yjOogEL 2023-11-02 14:31:10 +08:00
@as9567585 #13 对的,一般来说启动时会有一个欢迎页面解释这些权限,然后再弹窗向用户请求
原生一般点确认就不用管了,第三方系统可能还会有一堆杂七杂八的优化需要修改 以及没记错持续通知也可以用来保活,因此你可以做一个像通话那样的通知,这样就不需要申请权限了 |
16
TArysiyehua 2023-11-02 14:44:24 +08:00
@as9567585 专门出一个页面解释你的 app 要锁屏联网,让用户跳转到省电页面,给你的 app 设置即可。问题来了,锁屏为啥非要连着呢?如果是产品要求,那其实还有合规问题的。
如果非要搞,就让产品按照我之前说的,出页面解释。让用户去开,如果用户没开那就没办法了。 另外没有 api 可以申请 |
17
as9567585 OP |
18
as9567585 OP @vcn8yjOogEL 我研究研究,,
|
19
Musong 2023-11-02 15:21:00 +08:00
@as9567585 #12 目前我遇到的 国内的李跳跳、椒盐音乐,都是引导用户跳转省电设置修改。国外的 FloderSync 也是。似乎现在提倡各种权限让用户自己选择
|
20
Musong 2023-11-02 15:22:18 +08:00
@Musong #19 还有 AnyDesk RustDesk 啥的,不过 都是直接跳转该应用的省电设置界面,chua 的一下一步到位
|
21
TArysiyehua 2023-11-02 15:30:01 +08:00
@as9567585 为啥不申请屏幕常亮,不锁定屏幕呢?
|
22
ysc3839 2023-11-02 15:39:41 +08:00 via Android
@as9567585 理论上来说你弄了前台服务(通知栏有常驻通知),不需要特殊设置(自启动关闭,省电策略智能限制)就能一直运行的。
MIUI 有几个特殊开关: “自启动”控制是否能开机时启动,以及被杀死后能否自动重启。 “省电策略”控制没有前台服务时,后台服务(对用户完全不可见的服务)能运行的时长。 “最近任务锁定”控制按最近任务最底下 X 时会不会被清理。 MIUI 有一个与 AOSP 逻辑不一致,且用户没法控制的功能,那就是最近任务划掉 Activity ,会杀死整个应用。 如果某个应用是在 MIUI 白名单内(比如微信),且用户对这个应用开启了“自启动”,那划掉才不会被杀死。 如果这个应用不在白名单,但是开启了自启动,划掉会被杀死,但是应用可以立刻重新启动。一个案例是 Telegram ,在 Telegram 设置里开启后台保活,同时在 MIUI 设置里开启自启动,划掉 Telegram ,再打开应用信息,可以看到是在运行的(结束运行按钮不是灰的),关闭自启动,再划掉 Telegram ,应用信息里就显示不在运行了。 |
23
lindongwu11 2023-11-02 16:28:29 +08:00
我自用的笔记应用是作为开发者挂个常驻提示(还能用于点击唤醒),然后自己作为用户还得开锁定+后台无限制。
|
25
as9567585 OP @TArysiyehua 正准备,先这样做下,感觉也不太友好,比较耗电。 临时先这样弄下吧
|
27
as9567585 OP |
28
4kingRAS 2023-11-03 10:14:35 +08:00
用 Alarm 唤醒给你的 websocket 发心跳保活
|