gpt4 book ai didi

android - 当我的应用取消通知时,使用 FLAG_INSISTENT 通知播放的声音不会停止

转载 作者:太空宇宙 更新时间:2023-11-03 10:45:34 26 4
gpt4 key购买 nike

我有一个具有提醒功能的应用程序。当需要提醒用户某事时,我的应用程序会创建一个通知,可能使用 FLAG_INSISTENT 来确保听到警报。一旦用户与我的应用交互以确认警报,该应用就会取消通知。

用户可以通过下拉通知栏并点击我的通知来启动应用程序——在这种情况下一切都很好——或者通过其他方式导航到应用程序,例如从主屏幕启动它.如果用户使用通知栏方法,当用户触摸通知栏时,FLAG_INSISTENT 音频停止。但问题来了:如果用户直接进入应用程序而不触摸通知栏。 FLAG_INSISTENT 警报的音频会无限期地播放——即使在我的应用程序取消通知后也是如此。用户可以停止它的唯一方法是下拉通知栏(或重启设备!)。

自从可选的 FLAG_INSISTENT 功能上线以来,我一直收到来自愤怒用户的大量错误报告。它似乎并不特定于一个平台;报告此错误的用户拥有的硬件包括 Motorol Razr Maxx HD、Samsung Galaxy Note 和 HTC EVO 4G LTE。我曾有沮丧的用户报告说,他们通过卸载该应用程序来阻止噪音,甚至还说噪音不会停止。在网上搜索没有结果。

通知以或多或少的普通方式创建:

notification = new Notification(
R.drawable.icon,
message,
System.currentTimeMillis()
);

if (userDefinedaCustomSound) {
notification.sound = Uri.parse(userSelectedReminderSound);
} else {
notification.defaults |= DEFAULT_SOUND;
}

notification.ledARGB = 0xff00ff00;
notification.ledOnMS = 300;
notification.ledOffMS = 1000;
notification.flags |= Notification.DEFAULT_VIBRATE;

if (userWantsContinuousAlarm) {
notification.flags |= Notification.FLAG_INSISTENT;
}

NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(NOTIFICATION_BAR_ID, notification);

因此被取消:

nm.cancel(NOTIFICATION_BAR_ID);

我已经尝试将 FLAG_AUTO_CANCEL 添加到通知中;那没有效果。作为一种解决方法,我还尝试修改我的取消方法,以便它首先发出一个没有声音且没有 FLAG_INSISTENT 的新通知,然后取消;再次,音频继续播放。

有什么想法吗?

最佳答案

我遇到了同样的问题。取消通知后,音频继续播放。

我制定了这个解决方案,

  1. 执行取消的正常通知。mNotificationManager.cancel(getNotificationID(event));
  2. 立即创建另一个声音通知。 使用默认闹钟
  3. 立即取消通知。

注意:

  • 作为通知的一部分播放的声音不是默认的。
  • 方法 getNotificationID(event) 始终为相同的事件对象类型返回相同的常量。
  • 使用默认播放声音的通知将在取消通知时停止。
  • 我使用这个使用构建器设置声音setSound(Uri.parse(this.sharedPreferences.getString(key,"")))

根据观察,我认为这可能是一个错误。对铃声对象的引用未正确保留,因此在调用取消时,它无法调用铃声 .stop() 或无法调用。

希望你也能用上。


NotificationManager mNotificationManager = (NotificationManager) this.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.cancel(getNotificationID(event));
audioAlarmTriggered.remove(event.sensortype);

NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
builder.setAutoCancel(true)
.setSound(ringtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
mNotificationManager.notify(getNotificationID(event), builder.build());
mNotificationManager.cancel(getNotificationID(event));

关于android - 当我的应用取消通知时,使用 FLAG_INSISTENT 通知播放的声音不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24765023/

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