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。