NotificationChannel уведомление как сигнал тревоги, когда телефон отключен (Oreo) - PullRequest
0 голосов
/ 10 июня 2018

Я устанавливаю NotificationCompat.Builder с:

.setSound(getNotificationSound(), AudioManager.STREAM_ALARM)
.setCategory(NotificationCompat.CATEGORY_ALARM)
.setPriority(NotificationCompat.PRIORITY_MAX)

среди других обязательных свойств.

Для NotificationChannel , которыйЯ использую, я добавил:

.setBypassDnd(true)

Для Oreo, проблема заключается в том, что:

  • при включенном телефоне не слышен звук, когда телефон отключен или включенвибрировать, чтобы он не действовал как сигнал тревоги

Какой смысл Не беспокоить пользовательское исключение кнопка переключения из категории / канала уведомлений?Может ли это помочь в достижении моей цели, потому что я не увидел никаких отличий?

Для версий старше Oreo, где я не использую NotificationChannel, у меня есть поведение, которое я предпочитаю:

  • Звук уведомлений работает, когда телефон отключен, но нет вибрации
  • Звук уведомлений И вибрация работает, когда телефон работает на вибрации или с включенным звуком

Любые идеи, как решить эту проблемунесоответствие?

1 Ответ

0 голосов
/ 14 августа 2018

В конце я отказался от использования каналов уведомлений для звука и вибрации для получения согласованных результатов во всех версиях Android.

channel.setSound(null, null);

и вместо этого использовал MediaPlayer и Vibrator с таким вспомогательным классом, какэто:

public class RingtoneAndVibrationPlayer extends ContextWrapper{

private MediaPlayer mMediaPlayer;
private Vibrator mVibrator;

public RingtoneAndVibrationPlayer(Context context) {
    super(context);
}

public void play() {
    try {
        mMediaPlayer = new MediaPlayer();
        mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);

        final Uri uri = Uri.parse(PreferenceHelper.getNotificationSound();

        mMediaPlayer.setDataSource(this, uri);
        if (PreferenceHelper.isRingtoneEnabled()) {
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
            mMediaPlayer.setLooping(PreferenceHelper.isRingtoneInsistent());
            mMediaPlayer.prepareAsync();
        }

        mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mMediaPlayer.start();
            }
        });

        if (PreferenceHelper.isVibrationEnabled()) {
            mVibrator.vibrate(new long[] {0, 500, 500, 500},
                    PreferenceHelper.isRingtoneInsistent() ? 2 : -1);
        }
    } catch (SecurityException | IOException e) {
        stop();
    }
}

public void stop() {
    if (mMediaPlayer != null && mVibrator != null) {
        mMediaPlayer.reset();
        mMediaPlayer.release();
        mMediaPlayer = null;
    }
    if (mVibrator != null) {
        mVibrator.cancel();
    }
}
}

Единственный недостаток, который я вижу, состоит в том, что пользователь может вручную изменить настройки звука и вибрации канала уведомлений, которые будут воспроизводиться вместе с вышеуказанными.В моем случае это не приветствуется, поскольку в настройках приложения указаны явные настройки звука и вибрации.

...