Хочу отключить настройку вибрации устройства при звонке. Я реализовал 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();
}
Первоначально поток запускается приложением «Телефон», которое вибрирует на телефоне. Когда я выключаю вибрацию, эта проверка пропускается, но уже запущенный поток продолжает работать.
Это также объясняет, как можно включить вибрацию при входящем звонке. В этом случае поток изначально не запущен. Затем он запускается, когда я включаю настройку вибрации. Я не думаю, что есть какое-то решение проблемы без изменения приложения «Телефон».