如何使用Flutter Awesome Notification实现应用关闭时的定时本地通知?
Flutter离线定时本地通知实现方案说明
核心结论
iOS平台
仅使用Flutter Awesome Notification即可实现需求。iOS系统本身会统一托管应用注册的本地定时通知,只要用户授予了通知权限,就算应用完全关闭、未在后台运行,系统也会在指定时间触发通知,无需额外引入其他依赖。
Android平台
需要分场景判断:
- 若你仅适配Android 11及更低版本、对通知触发的可靠性要求不高,仅用Flutter Awesome Notification可满足基础需求
- 若你需要适配Android 12及更高版本、或需要闹钟级别的高可靠触发,必须搭配
android_alarm_manager_plus(原android_alarm_manager的官方维护分支)使用。
原因说明
Android 12之后系统对精确定时任务做了严格的权限限制,加上国产安卓ROM普遍有激进的后台查杀策略,Flutter Awesome Notification自身的定时调度任务很容易在应用被完全关闭后被系统回收,导致通知延迟触发甚至完全无法触发。
android_alarm_manager_plus会调用系统层级的闹钟服务注册定时任务,优先级远高于普通应用后台任务,就算应用被彻底杀死也能唤起执行预设逻辑,此时再调用Flutter Awesome Notification发送通知即可达到闹钟级的触发效果。
必要配置&注意事项
- Android端需要在
AndroidManifest.xml中声明精确闹钟权限:<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> - 提前向用户申请通知权限、精确闹钟权限、忽略电池优化权限,所有权限授予后定时任务才能正常触发
- 小米、华为、OPPO、vivo等国产ROM需要额外引导用户手动开启应用的自启动、后台活动权限,否则系统会拦截后台任务
- 如果需要实现重启设备后依然生效的定时通知,需要监听设备开机广播,在设备重启后重新注册所有定时任务
简易代码示例
仅用Awesome Notification实现定时通知(适用于iOS、Android低版本场景)
// 提前创建通知通道后调用 AwesomeNotifications().createNotification( content: NotificationContent( id: 1001, channelKey: 'scheduled_alarm_channel', title: '闹钟提醒', body: '你设定的时间已到', ), // 指定触发时间 schedule: NotificationCalendar( year: 2024, month: 6, day: 1, hour: 7, minute: 30, second: 0, repeats: false, ), );
搭配android_alarm_manager_plus实现高可靠定时(适用于Android高版本场景)
// 注册一次性定时任务,2024年6月1日7点30分触发 AndroidAlarmManager.oneShotAt( DateTime(2024,6,1,7,30), 1001, // 触发时执行的回调方法,回调中调用Awesome Notification发送通知 triggerAlarmNotification, exact: true, wakeup: true, );
内容的提问来源于stack exchange,提问作者ARPIT JAISWAL IET Student
相关产品推荐
相关产品推荐

