如何使用awesome_notifications在后台每日16:00调度本地通知?
当前本地通知实现
依赖配置
awesome_notifications: ^0.6.21
通知服务类
class NotificationService { sendNotification(){ AwesomeNotifications().isNotificationAllowed().then((isAllowed){ if(!isAllowed){ AwesomeNotifications().requestPermissionToSendNotifications(); } }); AwesomeNotifications().createNotification(content: NotificationContent(id: 2, channelKey: 'key', title: 'Title', body: 'Body', ), ); AwesomeNotifications().actionStream.listen((event) { Get.toNamed(Routes.HOME_PAGE); }); } }
主函数初始化
void main() { AwesomeNotifications().initialize(null, [NotificationChannel(channelKey: 'key', channelName: 'channelName', channelDescription: 'channelDescription')]); runApp(const MyApp()); }
问题
如何实现每日下午4点在后台调度该本地通知?
实现每日下午4点重复调度通知的方案
直接利用awesome_notifications的调度通知功能即可,无需额外依赖后台任务插件,核心是通过schedule参数配置重复触发规则:
1. 修改NotificationService的调度方法
将原有的sendNotification替换为支持每日重复的调度方法:
class NotificationService { // 调度每日下午4点的重复通知 Future<void> scheduleDailyNotification() async { // 检查并申请通知权限 bool isAllowed = await AwesomeNotifications().isNotificationAllowed(); if (!isAllowed) { await AwesomeNotifications().requestPermissionToSendNotifications(); } // 创建每日重复的调度通知 await AwesomeNotifications().createNotification( content: NotificationContent( id: 2, channelKey: 'key', title: '每日提醒', body: '这是下午4点的定时通知', ), schedule: NotificationCalendar( hour: 16, // 下午4点(24小时制) minute: 0, second: 0, repeats: true, // 开启每日重复 allowWhileIdle: true, // 允许设备休眠时触发 preciseAlarm: true, // Android 12+需要高精度触发权限 ), ); // 保留通知点击跳转逻辑 AwesomeNotifications().actionStream.listen((event) { Get.toNamed(Routes.HOME_PAGE); }); } }
2. 在App启动时触发调度
修改主函数,确保App启动时完成调度设置:
void main() async { WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter初始化完成 await AwesomeNotifications().initialize( null, [ NotificationChannel( channelKey: 'key', channelName: 'channelName', channelDescription: 'channelDescription', importance: NotificationImportance.High, // 提高优先级确保后台触发 enableVibration: true, ) ], ); // 启动时调度每日通知 await NotificationService().scheduleDailyNotification(); runApp(const MyApp()); }
关键注意事项
- Android权限配置:Android 12及以上需在
AndroidManifest.xml中添加高精度闹钟权限:
Android 13+还需添加通知权限:<uses-permission android:name="android.permission.USE_EXACT_ALARM" /><uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - 取消调度:若需停止每日通知,可调用
AwesomeNotifications().cancel(2)(根据通知ID取消)。 - 时区适配:默认使用设备本地时区,无需额外配置。
内容的提问来源于stack exchange,提问作者Mohamed Shaheen
相关产品推荐
相关产品推荐

