关闭应用程序后,为什么Flutter Android Alarm Manager无法在设备中运行?

时间:2020-10-30 09:32:33

标签: android flutter alarmmanager flutter-dependencies

我是新手。 除非关闭应用程序,否则警报功能将起作用。 关闭应用程序后,Android警报管理器无法正常工作。 我已将所有标签放入AndroidManifest.xml中。 在回叫时已调用此_ringAlarm()方法。

Future<void> _ringAlarm() async {
  


  NotificationManager n = new NotificationManager();

  n.initNotificationManager();
  n.showNotificationWithDefaultSound("Keep it,it's YOURS", widget.text.split("_")[1]);
  //n.showNotificationWithAlarmSound();
  //Working in Simulator but not in Device
  //n._showNotificationCustomSound();
  //FlutterRingtonePlayer.playAlarm();
  FlutterRingtonePlayer.play(
    android: AndroidSounds.alarm,
    ios: IosSounds.glass,
    looping: false, // Android only - API >= 28
    volume: 1, // Android only - API >= 28
    asAlarm: false, // Android only - all APIs
  );
  Future.delayed(const Duration(milliseconds: 4000), () {
    FlutterRingtonePlayer.stop();
  });
  


  print(Const.todoTextList);

}


这是通知管理器类的实现

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)
  {
    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);
  }



 static const MethodChannel platform = MethodChannel('your channel name');
 /* Future<void> showNotificationWithAlarmSound() async {
    /// this calls a method over a platform channel implemented within the
    /// example app to return the Uri for the default alarm sound and uses
    /// as the notification sound
    var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
    final String alarmUri = await platform.invokeMethod('getAlarmUri');
    final UriAndroidNotificationSound uriSound =
    //UriAndroidNotificationSound(AndroidSounds.alarm.toString());
     UriAndroidNotificationSound(alarmUri);
    final AndroidNotificationDetails androidPlatformChannelSpecifics =
    AndroidNotificationDetails(
        'uri channel id', 'your channel name', 'your channel description',
        sound: uriSound,
        styleInformation: const DefaultStyleInformation(true, true));
    final NotificationDetails platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics,iOSPlatformChannelSpecifics);
    await flutterLocalNotificationsPlugin.show(
        0, 'uri sound title', 'uri sound body', platformChannelSpecifics);
  }*/

  //For custom notification
  Future<void> _showNotificationCustomSound() async {
    const AndroidNotificationDetails androidPlatformChannelSpecifics =
    AndroidNotificationDetails(
      'your other channel id',
      'your other channel name',
      'your other channel description',
      sound: RawResourceAndroidNotificationSound('easy_going'),
    );
    const IOSNotificationDetails iOSPlatformChannelSpecifics =
    IOSNotificationDetails(sound: 'easy_going');
    //const MacOSNotificationDetails macOSPlatformChannelSpecifics =
    //MacOSNotificationDetails(sound: 'slow_spring_board.aiff');
    const NotificationDetails platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
    await flutterLocalNotificationsPlugin.show(
        0,
        'custom sound notification title',
        'custom sound notification body',
        platformChannelSpecifics);
  }
}

如果我不关闭实际应用程序会很好,一旦关闭应用程序通知将不起作用。我无法在模拟器中重现此问题。如果我有任何建议如何在模拟器中重现此问题,也会对我有帮助。

0 个答案:

没有答案