Настройка вибрации не отключается при приеме входящего вызова - Android

Хочу отключить настройку вибрации устройства при звонке. Я реализовал BroadcastReceiver для этой функции, которая выполняет действие при получении широковещательной передачи PHONE_STATE . Проблема в том, что я вообще не могу отключить вибрацию. Я пробовал следующее:

AudioManager audioManager = (AudioManager)
                            context.getSystemService(Context.AUDIO_SERVICE);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
                               AudioManager.VIBRATE_SETTING_OFF);

или

Vibrator vib = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vib.cancel();

Первый подход мне кажется идеальным. Работает даже на включение "вибрации" при поступлении звонка. Но я не могу их «выключить» в этом сценарии.

Кто-нибудь пробовал это?

Изменить: я проверил код приложения "Телефон" для Android. Следующий код присутствует в Ringer.java :

if (shouldVibrate() && mVibratorThread == null) {
    mContinueVibrating = true;
    mVibratorThread = new VibratorThread();
    mVibratorThread.start();
}

Первоначально поток запускается приложением «Телефон», которое вибрирует на телефоне. Когда я выключаю вибрацию, эта проверка пропускается, но уже запущенный поток продолжает работать.

Это также объясняет, как можно включить вибрацию при входящем звонке. В этом случае поток изначально не запущен. Затем он запускается, когда я включаю настройку вибрации. Я не думаю, что есть какое-то решение проблемы без изменения приложения «Телефон».

8
задан Tim 15 June 2012 в 12:03
поделиться