Остановить вибрацию системы при приеме вызова в Android

я сделал BroadcastReceiver, который прослушивает изменения в PHONE_STATE. в методе onReceive я хотел бы отключить системный вибратор. Я пробовал разные подходы, но пока ни один из них не работал.

AudioManager audioManager = (AudioManager)ctx.getSystemService(Context.AUDIO_SERVICE);
systemVibration = audioManager.getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER);
audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);

or

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

or

System.putInt(ctx.getContentResolver(), System.VIBRATE_ON, 0);

или все вместе.

первый подход с AudioManager действительно меняет системную настройку вибрации, но не влияет на текущую текущую.

есть идеи?

Саймон


person SimonSays    schedule 24.08.2011    source источник


Ответы (2)


Остановка вибрации, запущенной другим процессом, сейчас не разрешена в Android, и поэтому этот хак может остановить вибрацию или даст вам ощущение, что она остановила вибрацию.

долгое времяa = System.currentTimeMillis(); Вибратор v = (Вибратор) getSystemService(Context.VIBRATOR_SERVICE);

while ((System.currentTimeMillis() - timea) ‹ 15000) { v.vibrate(1); попробуйте { Thread.sleep (10); } поймать (InterruptedException e) {} }

person Viraj Tank    schedule 02.01.2014

Попробуйте это: (заимствовано и изменено из Android Source)

AudioManager am = Context.getSystemService(Context.AUDIO_SERVICE);
boolean vibeInSilent = false;
int callsVibrateSetting = AudioManager.VIBRATE_SETTING_OFF;

Settings.System.putInt(getContentResolver(), 
        Settings.System.VIBRATE_IN_SILENT,
        vibeInSilent ? 1 : 0);

//mAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
//or (not sure which one will work)
//mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

am.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
        callsVibrateSetting);
person Rajiv Makhijani    schedule 24.08.2011
comment
я видел этот код раньше. Тут 2 проблемы: 1. телефон не в беззвучном режиме и 2. не могу найти значение Settings.System.VIBRATE_IN_SILENT. в какой версии андроида это должно быть? я использую версию 2.1 (7) - person SimonSays; 25.08.2011
comment
Settings.System.VIBRATE_IN_SILENT должны существовать в версии 2.1. Он просто скрыт в документации. Константа не работает? Это также должно работать, если он не находится в режиме без вывода сообщений, но вам придется попробовать раскомментировать одну из этих двух строк. - person Rajiv Makhijani; 25.08.2011
comment
VIBRATE_IN_SILENT не может быть разрешен, и в документации говорится, что он, вероятно, будет удален в будущем выпуске. вместо этого я просто использовал строковое значение vibrate_in_silent. это действительно работает, но, конечно, переключает телефон в беззвучный режим, что на самом деле не входит в мои намерения. режим звонка должен остаться нетронутым, просто вибрация должна быть отключена. - person SimonSays; 26.08.2011
comment
Итак, вы хотите, чтобы он звонил, но не вибрировал? Если это просто вопрос сохранения опции, просто верните ее обратно после короткого таймера. - person Rajiv Makhijani; 26.08.2011