Flutter 本地通知 - 当应用程序在后台运行时,ZonedSchedule 通知不起作用
Posted
技术标签:
【中文标题】Flutter 本地通知 - 当应用程序在后台运行时,ZonedSchedule 通知不起作用【英文标题】:Flutter Local notifications - ZonedSchedule notification is not working while the app in background 【发布时间】:2021-08-29 07:00:49 【问题描述】:我正在为警报应用程序使用 Flutter 本地通知插件,当应用程序打开或关闭时警报会触发,但是当它在后台时它无法工作,直到它恢复,即使它不是在正确的时间,我知道这很奇怪事情,但它正在发生
初始化:
Future<void> initNotifications() async
final initSettingsandroid =
const AndroidInitializationSettings("@mipmap/ic_launcher");
final initSettings = InitializationSettings(
android: initSettingsAndroid,
);
await FlutterLocalNotificationsPlugin().initialize(initSettings);
tz.initializeTimeZones();
final String currentTimeZone =
await FlutterNativeTimezone.getLocalTimezone();
tz.setLocalLocation(tz.getLocation(currentTimeZone));
报警功能:
void alarm(String title, String body, DateTime fireTime) async
const androidPlatformChannalSpecifics = AndroidNotificationDetails(
"alarm notification",
"alarm notification",
"Channal for Alarm Notification",
icon: "@mipmap/ic_launcher",
sound: RawResourceAndroidNotificationSound("alarm"),
importance: Importance.max,
priority: Priority.max,
fullScreenIntent: true,
);
const notificationDetails =
NotificationDetails(android: androidPlatformChannalSpecifics);
await FlutterLocalNotificationsPlugin().zonedSchedule(
0,
title,
body,
TZDateTime.from(fireTime, tz.local),
notificationDetails,
payload: "isPressed",
androidAllowWhileIdle: true,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
);
我的权限和接收者:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<application
android:label="Prodkit"
android:icon="@mipmap/ic_launcher">
<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
<receiver android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
android:showWhenLocked="true"
android:turnScreenOn="true">
我不知道到底是什么问题,但我尝试了很多方法,但都没有成功。
【问题讨论】:
【参考方案1】:我看到你正在设置fullScreenIntent: true,
,所以根据官方文档:
如果您的应用程序需要调度全屏意图的能力 通知,将以下属性添加到您的活动中 开幕。对于 Flutter 应用程序,通常只有一个 活动从 FlutterActivity 扩展而来。这些属性确保 屏幕会在设备锁定时打开并显示。
<activity
android:showWhenLocked="true"
android:turnScreenOn="true">
确保您已将此添加到您的AndroidManifest.xml
。
【讨论】:
我已经添加了这个,它也不起作用。 文档中还提到了一件事:“对于Android 8.0+,声音和振动与通知通道相关联,只能在首次创建时进行配置。显示/调度通知将创建一个具有指定 id 的频道,如果它不存在。如果另一个通知指定了相同的频道 id,但尝试指定另一个声音或振动模式,那么什么都不会发生。也许只是尝试更改频道 ID 以验证是否不是这种情况。以上是关于Flutter 本地通知 - 当应用程序在后台运行时,ZonedSchedule 通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章