我在尝试设置通知警报声的持续时间时遇到了一些麻烦。以下是它现在的样子:
NotificationManager mNotificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mBuilder.setAutoCancel(true);
Uri alarmSound = Uri.parse(sharedPref.getString(
"notifications_new_message_ringtone", ""));
if (alarmSound != null) {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
try {
mediaPlayer.setDataSource(context, alarmSound);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
}
mBuilder.setSound(alarmSound);
mNotificationManager.notify(notificationId, mBuilder.build());
new Thread() {
public void run() {
try {
sleep(sharedPref.getInt("alarm_duration",2000) * DateUtils.SECOND_IN_MILLIS);
} catch (InterruptedException e) {
e.printStackTrace();
}
mNotificationManager.cancel(notificationId);
}
}.start();
}
如您所见,我在sharedPref变量给出一段时间后停止通知(用户可以设置它)。问题是这一行:" mNotificationManager.cancel(notificationId)"不仅会停止声音,还会停止整个通知(灯光,振动,甚至通知抽屉上的图标)。
有没有办法在不完全取消通知的情况下关闭通知?
提前致谢!
答案 0 :(得分:1)
没有办法只取消声音。您可以取消整个Notification
,然后在没有声音的情况下再次发布。或者,您可以将AudioManager.STREAM_NOTIFICATION
流类型静音x
一段时间,然后在Notification
声音结束后取消静音。
控制音量:
setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);
将Notification
声音静音:
final AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_NOTIFICATION, true or false);
答案 1 :(得分:0)
您是否知道当收到通知并触摸通知栏时会发生什么?它不会取消通知,只是停止声音。似乎应该有一种方法来从代码中做同样的事情。