Flutter真机不显示Awesome Notifications通知,模拟器正常
Flutter提醒应用真机无法显示通知的解决方案
问题概述
开发的提醒类Flutter应用,基于Awesome Notifications实现定时推送通知,模拟器上所有功能正常,但真实设备完全无法显示通知,官方示例代码也存在同样问题。
排查与修复步骤
添加精确闹钟权限:Android 12及以上版本需要
SCHEDULE_EXACT_ALARM权限,在android/app/src/main/AndroidManifest.xml中添加:<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>优化权限请求逻辑:原代码仅请求通知权限,需补充精确闹钟权限的动态请求(需先添加
permission_handler依赖到pubspec.yaml):void _requestPermissions() async { if (Platform.isAndroid) { // 请求通知权限 bool notificationAllowed = await AwesomeNotifications().isNotificationAllowed(); if (!notificationAllowed) { await AwesomeNotifications().requestPermissionToSendNotifications(); } // Android 12+ 请求精确闹钟权限 if (PlatformVersion.isAndroid12OrHigher) { final alarmStatus = await Permission.scheduleExactAlarm.status; if (!alarmStatus.isGranted) { await Permission.scheduleExactAlarm.request(); } } } }调整初始化顺序:先完成权限请求,再初始化通知通道,避免权限未获取时通道创建失败:
@override void initState() { super.initState(); _loadThemePreference(); _loadReminders(); // 先请求权限,再初始化通知 _requestPermissions().then((_) => _initializeNotifications()); }检查通知渠道与图标:确保通知渠道的
importance设为NotificationImportance.High,同时验证应用图标路径正确(真机上图标缺失会导致通知不显示):void _initializeNotifications() { AwesomeNotifications().initialize( // 确保图标在android/res/drawable目录下,文件名匹配 'resource://drawable/app_icon', [ NotificationChannel( channelKey: 'gcalc_channel', channelName: '提醒通知', channelDescription: '定时提醒专属通知渠道', defaultColor: Color(0xFF9D50DD), ledColor: Colors.white, importance: NotificationImportance.High, vibrationPattern: Int64List.fromList([0, 1000, 500, 1000]), ), ], ); }处理国产ROM后台限制:小米、华为、OPPO等国产系统对后台应用有严格管控,需手动将应用加入后台白名单,允许自启动和后台运行权限。
验证系统时间:确保真机系统时间与提醒时间的时区、数值一致,避免时间偏差导致通知不触发。
额外测试建议
- 设置1分钟内的提醒进行测试,提升验证效率
- 检查真机应用的通知设置:确认通知权限开启、对应渠道未被禁用
- Android 13及以上版本无需额外配置
POST_NOTIFICATIONS,permission_handler会自动处理
内容的提问来源于stack exchange,提问作者Rahman ziad
相关产品推荐
相关产品推荐

