如何在android中的请勿打扰(DND)模式下发送声音和振动通知

时间:2016-02-29 13:04:11

标签: android android-notifications

当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());

当我的应用处于后台时,我也想要声音和振动通知。

3 个答案:

答案 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