AndroidAlarmManager 调用flutterLocalNotificationsPlugin.show(),但没有显示通知
AndroidAlarmManager calls flutterLocalNotificationsPlugin.show(), but no notification is displayed
我对 AlarmManager 和 FlutterLocalNotification 有一个严重的问题。
当我从 AlarmManager 回调中调用 show() 时,为了写入预定通知,没有显示任何通知。
我在App的main()函数中初始化flutter_local_notification插件是这样的:
NotificationManager n = new NotificationManager();
void main() async
{
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
n.initNotificationManager();
runApp(MainClass());
}
NotificationManager class 是:
class NotificationManager
{
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
AndroidInitializationSettings initializationSettingsAndroid;
IOSInitializationSettings initializationSettingsIOS;
InitializationSettings initializationSettings;
void initNotificationManager()
{
initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
initializationSettingsIOS = new IOSInitializationSettings();
initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
void showNotificationWithDefaultSound(String title, String body, String payload)
{
var androidPlatformChannelSpecifics =
new AndroidNotificationDetails('your channel id',
'your channel name',
'your channel description',
importance: Importance.Max,
priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics, payload: payload);
}
}
在应用程序内部页面的initState()中,我让AlarmManager以这种方式调用回调:
void initState()
{
super.initState();
AndroidAlarmManager.oneShotAt(DateTime.now().add(Duration(seconds: 5)), 0, alarmCallback);
//......
}
回调为:
alarmCallback()
{
n.showNotificationWithDefaultSound("Title", "MySuperBody", "Hey, this is the Payload!");
return;
}
我该如何解决这个问题?
解决方案是在 android studio 中使用 Refractor 将您的项目迁移到 AndroidX。
我对 AlarmManager 和 FlutterLocalNotification 有一个严重的问题。
当我从 AlarmManager 回调中调用 show() 时,为了写入预定通知,没有显示任何通知。
我在App的main()函数中初始化flutter_local_notification插件是这样的:
NotificationManager n = new NotificationManager();
void main() async
{
WidgetsFlutterBinding.ensureInitialized();
await AndroidAlarmManager.initialize();
n.initNotificationManager();
runApp(MainClass());
}
NotificationManager class 是:
class NotificationManager
{
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin;
AndroidInitializationSettings initializationSettingsAndroid;
IOSInitializationSettings initializationSettingsIOS;
InitializationSettings initializationSettings;
void initNotificationManager()
{
initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
initializationSettingsIOS = new IOSInitializationSettings();
initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);
flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
void showNotificationWithDefaultSound(String title, String body, String payload)
{
var androidPlatformChannelSpecifics =
new AndroidNotificationDetails('your channel id',
'your channel name',
'your channel description',
importance: Importance.Max,
priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
flutterLocalNotificationsPlugin.show(0, title, body, platformChannelSpecifics, payload: payload);
}
}
在应用程序内部页面的initState()中,我让AlarmManager以这种方式调用回调:
void initState()
{
super.initState();
AndroidAlarmManager.oneShotAt(DateTime.now().add(Duration(seconds: 5)), 0, alarmCallback);
//......
}
回调为:
alarmCallback()
{
n.showNotificationWithDefaultSound("Title", "MySuperBody", "Hey, this is the Payload!");
return;
}
我该如何解决这个问题?
解决方案是在 android studio 中使用 Refractor 将您的项目迁移到 AndroidX。