Как полностью установить тихий режим звонка? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь создать приложение, которое автоматически отключит режим звонка с помощью AlarmManager. Он работает, но не работает, как ожидалось.

@Override
public void onReceive(Context context, Intent intent) {
    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}

На основе документации Android:

RINGER_MODE_SILENT - Режим звонка, который будет тихим и не будет вибрировать. (Это отменяет настройку вибрации.)

Но я обнаружил, что мой телефон все еще вибрирует. Просто включите функцию «Не беспокоить» и измените режим звонка на вибрацию. Я попытался установить для него RINGER_MODE_NORMAL и RINGER_MODE_VIBRATE, и оно работает, но не с RINGER_MODE_SILENT. Я уже предоставляю своему приложению доступ к «Не беспокоить» и использую следующие разрешения:

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Есть ли неправильные или отсутствующие шаги?

1 Ответ

0 голосов
/ 13 мая 2019

Наконец-то нашли решение этой проблемы. Кажется, что Android по-прежнему рассматривает телефон в беззвучном режиме, если включен режим «Не беспокоить», даже если режим звонка установлен в обычный режим вручную. Итак, мне нужно сначала установить режим звонка в обычный режим, подождать 1 секунду, а затем снова установить режим без звука.

if(audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT) {
        audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
}

// Wait for 1 second
// Direct changing won't set the Do Not Disturb on
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
...