gpt4 book ai didi

java - 背景中的 flutter 声音警报并在点击通知时取消

转载 作者:行者123 更新时间:2023-12-03 04:00:19 27 4
gpt4 key购买 nike

Flutter 在后台发出声音警报,并在单击通知时取消。
我正在尝试创建一个基本的警报应用程序来测试/学习 flutter 。我的应用程序的高级设计如下所示:
创建警报:
(一种)。用户创建警报
(b)。我使用 android_alarm_manager 来安排闹钟
(C)。在闹钟回调中,我使用 FlutterRingtonePlayer.playAlarm()
(d)。使用 flutter_local_notification在闹钟响起时显示通知,以便用户取消闹钟。
当用户点击通知时:

  • 我收到了 flutter_local_notification 的回电,这将打开应用程序。
  • 我愿意 FlutterRingtonePlayer.stop()在那,但它并没有停止警报。

  • 它现在不起作用,因为 FlutterRingtonePlayer当应用程序从通知再次启动时再次构造。
    我能想到的可能解决方案是:
  • 不知何故坚持FlutterRingtonePlayer在手机的共享内存中,以便我在取消闹钟时可以重复使用它。也许以某种方式序列化它?
  • 想出一种方法来停止当时手机的所有声音。

  • 还有更多吗?有没有更好的方法来做到这一点?
    Here is my code:

    --------------- Scheduling alarm -----------------------------------

    void scheduleAlarm(Alarm alarm) {
    alarm.alarmTime =
    getUpdatedAlarmDateTime(TimeOfDay.fromDateTime(alarm.alarmTime));

    AndroidAlarmManager.oneShot(
    alarm.alarmTime.difference(DateTime.now()), alarm.alarmId, soundAlarm,
    wakeup: true, alarmClock: true, rescheduleOnReboot: true);
    }

    void soundAlarm(int alarmId) async {
    var androidPlatformChannelSpecifics = AndroidNotificationDetails(
    'your channel id', 'your channel name', 'your channel description',
    importance: Importance.Max, priority: Priority.High, ticker: 'ticker');
    var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
    var platformChannelSpecifics = new NotificationDetails(
    androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
    await globalPlugin.show(10, 'title', 'body', platformChannelSpecifics,
    payload: '$alarmId');

    FlutterRingtonePlayer.playAlarm(
    looping: true,
    volume: 0.9,
    );
    }

    --------- End Scheduling alarm ----------------------------------

    -------- Setting up notifications callback ---------------------

    Future initializeNotificationPlugin() async {
    var initializationSettingsAndroid =
    new AndroidInitializationSettings('@mipmap/ic_launcher');
    var initializationSettingsIOS = new IOSInitializationSettings();
    var initializationSettings = new InitializationSettings(
    initializationSettingsAndroid, initializationSettingsIOS);
    await globalPlugin.initialize(initializationSettings,
    onSelectNotification: onSelectNotification);
    }

    Future onSelectNotification(String payload) async {
    await FlutterRingtonePlayer.stop();
    }

    ---------------------------------------------------------------

    最佳答案

    如前所述,不需要使用 FlutterRingtonePlayer ,这里有更详细的答案,在 AndroidNotificationDetails ,有这个属性additionalFlags并且通过将此属性设置为 4,通知将一直响铃直到用户点击它。代码示例怎么做,摘自this example是:

     .
    .
    .
    //This flag
    const int insistentFlag = 4;

    final AndroidNotificationDetails androidPlatformChannelSpecifics =
    AndroidNotificationDetails(
    'your channel id', 'your channel name', 'your channel description',
    importance: Importance.max,
    priority: Priority.high,
    ticker: 'ticker',

    //Exactly here
    additionalFlags: Int32List.fromList(<int>[insistentFlag]));
    .
    .
    .

    关于java - 背景中的 flutter 声音警报并在点击通知时取消,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703128/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com