You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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. 初始化和通知配置细节

  • 通知图标:确保初始化时指定的图标存在于mipmapdrawable目录,Android 15对通知图标要求更严格,透明图标可能无法正常显示。
  • 通知渠道:Android 8.0+必须创建通知渠道,flutter_local_notifications初始化时会自动创建,但要确保渠道的importancepriority设置足够高:
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

火山引擎 最新活动