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