Flutter闹钟App被用户杀死后仍可播放报警音的实现方案咨询
Flutter Android端闹钟杀进程后持续响铃解决方案
方案1:android_alarm_manager_plus + 原生前台服务
原生android_alarm_manager触发的回调运行在Dart Isolate中,应用进程被杀死后Isolate会直接销毁,响铃逻辑自然中断。推荐改用维护更活跃的android_alarm_manager_plus,配合Android原生前台服务实现稳定响铃:
- 闹钟触发时直接唤起Android原生前台服务,闹钟类场景的前台服务无需用户手动授权即可启动,服务启动时要弹出常驻通知,避免被系统后台回收
- 响铃、振动逻辑完全放在原生服务层实现,不要放到Dart层处理,服务运行生命周期独立于应用主进程,只要不被系统强行终止就会持续播放铃声
- 通知栏配置「停止」「稍后提醒」等动作按钮,点击后直接停止服务并终止响铃,也可以配置点击通知跳转回Flutter应用的交互页面
方案2:原生广播接收器 + 系统铃声播放接口
如果不想做太重的服务适配,可以用广播机制实现轻量响铃:
- Dart层仅负责设置闹钟时间,闹钟触发时发送Android系统自定义广播
- 提前在
AndroidManifest.xml中注册静态广播接收器,接收器接收到闹钟广播后直接调用系统铃声接口播放,该播放行为由系统层面托管,不会因为应用主进程被杀而中断 - 同步注册停止响铃的自定义广播,用户点击停止按钮时发送对应广播即可终止播放
必要适配项(针对Android 12及以上版本)
- 必须申请
SCHEDULE_EXACT_ALARM权限,Android 12之后第三方应用默认没有精确闹钟调度权限,会导致定时不准或者进程被杀后闹钟完全不触发 - 所有和响铃、振动、定时触发相关的核心逻辑尽量下沉到原生层实现,不要依赖Dart Isolate做长耗时、高优先级的任务
内容的提问来源于stack exchange,提问作者Divyank Kaushik
相关产品推荐
相关产品推荐

