当Android设备上的手机处于请勿打扰模式时,如何发送声音和振动通知。 我使用以下代码,当我的应用程序当前处于前台时,它正在工作。
PendingIntent contentIntent = PendingIntent.getActivity(this, NOTIFICATION_ID,
resultIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Notification")
.setStyle(new NotificationCompat.BigTextStyle().bigText("You've received new message."))
.setContentText("You've received new message.");
// FOR SILENT MODE
AudioManager am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);
// For Normal mode
am.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
mBuilder.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
// Set Vibrate, Sound and Light
int defaults = 0;
defaults = defaults | Notification.DEFAULT_LIGHTS;
// defaults = defaults | Notification.DEFAULT_VIBRATE;
// defaults = defaults | Notification.DEFAULT_SOUND;
mBuilder.setDefaults(defaults);
mBuilder.setSound(Uri.parse("android.resource://" + getPackageName()
+ "/" + R.raw.siren));
// Cancel the notification after its selection
mBuilder.setAutoCancel(true);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
当我的应用处于后台时,我也想要声音和振动通知。
答案 0 :(得分:2)
一般来说,你不能。即使是MAX优先级的通知也不会在免打扰模式下显示。
我可以想象的可能的解决方法是使用android.permission.SYSTEM_ALERT_WINDOW
在系统窗口上绘制自定义通知(FB Messanger以类似的方式工作):Creating a system overlay window (always on top)。
但是这种方法仅适用于极少数情况,并且大多数情况下它违反了Android UI / UX最佳实践。
答案 1 :(得分:0)
如果您可以获得更改设备设置的正确权限,则可以在应用中显示声音和振动通知。另请查看this out。
答案 2 :(得分:0)
好消息,你已经到了一半。
我之前使用 AudioManager & VIBRATOR_SERVICE (是的,我知道;)
这个想法不是使用 NotificationCompat.Builder ,因为它将依赖于系统设置,如果设备处于静音模式,它不会振动也不会播放声音。你必须使用AudioManager& amp;手动播放声音。使用 VIBRATOR_SERVICE 振动。
您正在使用AudioManager&设置属性但你实际上从未要求它播放声音。所以,在你的代码中它从未真正使用过。
以下an example如何使用 AudioManager 播放声音,它也会忽略静音模式:
此处使用 VIBRATOR_SERVICE an example:
结合这两种方法并沟通 NotificationCompat.Builder