【发布时间】:2014-07-15 17:59:01
【问题描述】:
我有一个具有提醒功能的应用程序。当需要提醒用户某事时,我的应用程序会创建一个通知,可能使用 FLAG_INSISTENT 来确保听到警报。一旦用户与我的应用交互以确认警报,应用就会取消通知。
用户可以通过下拉通知栏并点击我的通知来启动应用程序(在这种情况下一切都很好)或通过其他方式导航到应用程序,例如从主屏幕启动它.如果用户使用通知栏方法,当用户触摸通知栏时,FLAG_INSISTENT 音频停止。但问题来了:如果用户直接进入应用程序而不触摸通知栏。 FLAG_INSISTENT 警报的音频会无限期地播放——即使我的应用程序取消了通知。用户可以阻止它的唯一方法是拉下通知栏(或重新启动设备!)。
自从可选的 FLAG_INSISTENT 功能上线以来,我收到了大量来自愤怒用户的错误报告。它似乎并不特定于一个平台。报告此错误的用户拥有的硬件包括 Motorol Razr Maxx HD、三星 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 的新通知,然后取消;再次,音频继续播放。
有什么想法吗?
【问题讨论】:
-
没有办法让声音静音,但解决方案是,让你的音频保持简短,不可重复,如果可能的话,取消整个通知,然后在没有声音的情况下再次发布。
-
正如我在帖子的最后部分中提到的,我已经尝试取消整个通知,然后在没有声音的情况下重新发布。声音还在继续。音频的长度无关紧要,因为根据问题的定义(因为我使用 FLAG_INSISTENT 发布它),无论它是什么,它都会不断重复音频。
-
我相信这个链接会解决你的问题:stackoverflow.com/questions/2261539/…
-
那篇文章只是建议取消通知——我已经在这样做了。问题是即使在通知被取消后声音仍然在播放。
标签: android notifications