三星Galaxy S24/S20+设备上Activity Recognition功能停止工作问题求助
我之前也帮朋友排查过类似的三星设备上Activity Recognition失效的问题,先给你梳理几个大概率的原因和解决方向,你可以逐一排查下:
三星严格的电池优化策略:One UI的后台限制真的挺严的,哪怕是前台服务,闲置一段时间后也可能被系统悄悄限制。你可以去
设置 > 电池和设备维护 > 电池 > 后台使用限制,找到你的应用,把它设为「不限制」;另外还要检查「深度睡眠」和「超级省电模式」的白名单,把应用加进去,这俩模式会直接切断大部分后台进程。前台服务通知的优先级问题:如果你的前台服务通知优先级太低,三星系统会把它归为不重要通知,时间久了就会连带限制服务运行。一定要确保前台服务的通知用的是
IMPORTANCE_HIGH,同时对应的通知渠道优先级也要拉满,这样系统才会认定这个服务是必须持续运行的。Activity Recognition的注册逻辑:有时候系统回收服务后,Activity Recognition的注册会丢失,你得在服务的
onStartCommand()方法里重新初始化识别请求;另外,更新间隔不要设得太长,比如尽量不要超过60秒,过长的间隔可能触发系统的暂停机制。还要注意用PendingIntent.getService()或getBroadcast()来发起请求,确保回调能正常触发。权限与自启动设置:确认下
ACTIVITY_RECOGNITION权限和位置权限都设为「始终允许」,而不是「仅使用时允许」;同时去设置 > 应用 > 你的应用 > 权限 > 自启动开启自启动,不然系统杀后台后,应用可能没法自动重启服务续上识别。
另外你贴的代码没写完,不过还要注意:在前台服务的onDestroy()或onTaskRemoved()方法里,别直接取消Activity Recognition请求,而是要发送广播触发应用重新启动服务并注册识别;还有必须用startForegroundService()启动服务,且5秒内调用startForeground()显示通知,要是通知被用户不小心滑掉,前台服务会降级成后台服务,很快就会被系统限制。
内容来源于stack exchange

