求助:Flutter中Android 12及以上版本Local Notification失效问题
Android 12+ 适配 awesome_notification 通知失效问题解决
- 使用插件:awesome_notification

你提到本地通知代码在Android 11及以下正常运行,但在Android 12及以上版本,基础通知和定时通知都无法工作,这是因为Android 12(API 31)及以上对通知系统新增了强制规范,以下是针对性的适配方案:
1. 强制创建合规通知渠道
Android 12+要求所有通知必须绑定已创建的通知渠道,且需配置lockscreenVisibility等新参数:
await AwesomeNotifications().initialize( null, [ NotificationChannel( channelKey: 'basic_notify', channelName: '基础通知渠道', channelDescription: '用于发送普通本地通知', importance: NotificationImportance.High, lockscreenVisibility: NotificationVisibility.Public, defaultColor: Colors.blue, ledColor: Colors.blue ), NotificationChannel( channelKey: 'scheduled_notify', channelName: '定时通知渠道', channelDescription: '用于发送定时触发的通知', importance: NotificationImportance.High, lockscreenVisibility: NotificationVisibility.Public ) ] );
2. 动态申请通知权限
Android 13(API 33)及以上必须动态申请POST_NOTIFICATIONS权限,Android 12虽不强制,但建议兼容以覆盖全版本:
bool hasPermission = await AwesomeNotifications().isNotificationAllowed(); if (!hasPermission) { hasPermission = await AwesomeNotifications().requestPermissionToSendNotifications(); }
3. 定时通知绑定对应渠道
确保定时通知代码指定了正确的渠道Key,否则Android 12+会拒绝展示:
await AwesomeNotifications().createNotification( content: NotificationContent( id: 101, channelKey: 'scheduled_notify', // 必须匹配已创建的渠道Key title: '定时提醒', body: '预设的定时通知已触发', ), schedule: NotificationCalendar( hour: 14, minute: 30, repeats: false ) );
4. 完善AndroidManifest配置
添加必要权限和组件,确保插件能正常工作:
<!-- 通知权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- 精确定时需要的权限 --> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" /> <application ...> <!-- 插件需要的广播接收器 --> <receiver android:name="com.awesome_notifications.receivers.AlarmReceiver" /> <receiver android:name="com.awesome_notifications.receivers.BootReceiver" /> </application>
最后建议把awesome_notification更新到最新版本,避免版本迭代带来的兼容问题。
内容的提问来源于stack exchange,提问作者Shadman Nehal Khan
相关产品推荐
相关产品推荐

