android关闭本应用的通知声音代码,关于android:当我的应用取消通知时,播放带有FLAG_INSISTENT通知的声音不会停止...

我有一个具有提醒功能的应用程序。当需要提醒用户某些内容时,我的应用程序会创建一条通知,可能使用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添加到通知中;那没有效果。解决方法是,我还尝试修改cancel方法,以便它首先发出没有声音且没有FLAG_INSISTENT的新通知,然后取消;再次,音频只是继续播放。

有任何想法吗?

没有办法使声音静音,但是解决方法是,使音频简短,不可重复,并且如果可能的话,只需取消整个通知,然后在没有声音的情况下再次发布即可。

正如我在帖子的最后部分中提到的那样,我已经尝试取消整个通知,然后在没有声音的情况下重新发布它。 声音仍在继续。 音频的长度无关紧要,因为根据问题的定义(因为Im是用FLAG_INSISTENT发布的),无论它是什么,它都会不断重复音频。

我确定此链接可以解决您的问题:stackoverflow.com/questions/2261539/

该帖子只是建议取消通知-我已经在这样做了。 问题是,即使取消通知,声音仍会继续播放。

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

我制定了这项工作,

执行正常的通知已取消。mNotificationManager.cancel(getNotificationID(event));

立即创建另一个带有声音的通知。使用默认的警报。

立即取消通知。

注意:

通知中播放的声音不是默认声音。

方法getNotificationID(event)始终为相同的事件对象类型返回相同的常量。

取消通知后,使用默认播放声音的通知将停止。

我使用构建器使用此设置声音

setSound(Uri.parse(this.sharedPreferences.getString(key,"")))

从观察结果来看,我认为这可能是一个错误。没有正确保留对铃声对象的引用,因此在调用cancel时,它无法在铃声.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));

如果以上代码在您的服务类别中。然后我认为问题是当您直接打开应用程序而不是使用通知栏时,此时它没有调用您的服务类,否则您需要调用nm.cancel(NOTIFICATION_BAR_ID);。从单击通知时打开的活动中。

为此,您需要一个保留静态NOTIFICATION_BAR_ID的全局类,这样对您管理cancel方法会有所帮助。

希望能解决您的问题。

NOTIFICATION_BAR_ID是一个常量。 该应用已在取消通知,并且取消在其他所有方面都起作用(例如,图标从通知栏中消失了)。

我认为您的问题是特定于设备的。 在多种设备上测试您的应用

正如我在原始帖子中提到的那样:"它似乎并不特定于一个平台;报告此错误的用户所用的硬件包括Motorol Razr Maxx HD,三星Galaxy Note和HTC EVO 4G LTE。"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值