Flutter定时通知在Android 15设备上无法正常工作(已添加权限)
Flutter定时通知在Android 15设备上无法正常工作(已添加权限)
我太懂你这种明明按要求加了权限,却收不到定时通知的糟心感了!Android 15(API 35)在通知和后台任务权限上有不少新限制,咱们结合你已经做的步骤,一步步排查可能的遗漏点:
你已完成的操作
- 已在
AndroidManifest.xml中添加通知相关权限
针对Android 15的关键排查点
1. 权限不全:精确定时需要额外权限
Android 15对精确定时任务新增了SCHEDULE_EXACT_ALARM权限,这个权限不能自动授予,必须让用户手动开启。除了你已经加的POST_NOTIFICATIONS,还得在AndroidManifest.xml里补上:
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/> <!-- 如果需要设备重启后仍能触发通知,还要加这个 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
同时要在代码里主动请求权限,引导用户去设置开启:
import 'package:permission_handler/permission_handler.dart'; Future<void> requestRequiredPermissions() async { // 请求通知权限 final notificationPerm = await Permission.notification.request(); // 请求精确定时权限 final exactAlarmPerm = await Permission.scheduleExactAlarm.request(); if (!notificationPerm.isGranted || !exactAlarmPerm.isGranted) { // 跳转到应用设置页让用户手动开启 await openAppSettings(); } }
2. 初始化和通知配置细节
- 通知图标:确保初始化时指定的图标存在于
mipmap或drawable目录,Android 15对通知图标要求更严格,透明图标可能无法正常显示。 - 通知渠道:Android 8.0+必须创建通知渠道,flutter_local_notifications初始化时会自动创建,但要确保渠道的
importance和priority设置足够高:
final AndroidInitializationSettings androidInit = AndroidInitializationSettings('@mipmap/ic_launcher'); final InitializationSettings initSettings = InitializationSettings(android: androidInit); await flutterLocalNotificationsPlugin.initialize(initSettings);
3. 定时通知的调度参数
调度时一定要加上androidAllowWhileIdle: true,这个参数能确保设备休眠时也能触发通知,Android 15对后台休眠的限制更严,缺了这个很可能失效:
import 'package:timezone/timezone.dart' as tz; await flutterLocalNotificationsPlugin.zonedSchedule( 0, // 通知ID '定时提醒', '这是你的定时通知内容', // 设置5分钟后触发(测试时别设太近,避免系统节流) tz.TZDateTime.now(tz.local).add(const Duration(minutes: 5)), NotificationDetails( android: AndroidNotificationDetails( 'custom_channel_id', '定时通知渠道', importance: Importance.max, priority: Priority.high, channelDescription: '用于接收定时本地通知', ), ), androidAllowWhileIdle: true, // 关键参数! uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, );
4. 系统限制:电池优化和后台进程
Android 15对后台耗电管控更严,如果你把应用加入了电池优化列表,系统会限制它的定时任务触发。去设备设置→电池→电池优化,找到你的应用,设置为“不优化”。
另外,测试时不要完全杀掉应用,有些厂商的系统会直接终止后台进程,导致定时任务失效,可以先把应用放在后台再测试。
备注:内容来源于stack exchange,提问作者Ajay prasath




