Как обеспечить индивидуальную вибрацию при определенных входящих звонках - PullRequest
22 голосов
/ 10 января 2012

Программа работает следующим образом: у пользователя есть список телефонных номеров, для которых мобильный телефон может вибрировать при входящем звонке, только когда никакое другое общесистемное приложение не обеспечивает вибрации (например, в режиме отключения звука). Я знаю, что это как-то противоречит правилам, так как приложение должно уважать настройки пользователей, но приложение ограничено некоторыми определенными пользователями с этой потребностью. Я пробовал два способа, но ни один из них не удовлетворяет:

  1. Прослушайте состояние телефонии и напрямую запустите службу вибрации с моим собственным шаблоном (с Vibrator.vibrate()). Этот метод эффективен при отсутствии входящих звонков, но действует случайным образом, когда телефон находится в состоянии CALL_STATE_RINGING, и я полагаю, что это из-за конфликта с общесистемным приложением, которое фактически обрабатывает вибрацию при входящем звонке.

  2. Оцените, вибрирует ли мобильный телефон при входящем звонке (с помощью AudioManager.shouldVibrate()), и решите, следует ли изменить настройки вибрации (с помощью AudioManager.setRingerMode() и AudioManager.setVibrateSetting()). Если настройки вибрации изменены моим приложением, они должны быть восстановлены, как только сотовый телефон вернется в состояние CALL_STATE_IDLE. Этот метод, однако, все еще иногда не работает, без каких-либо признаков причины.

Я надеюсь, что кто-то мог бы дать совет по этому вопросу. Комментарии к этим двум или другим предложениям приветствуются.

1 Ответ

6 голосов
/ 09 мая 2012

Вам нужно поиграть с двумя настройками, чтобы ваш телефон вибрировал. Первый - это режим звука, который необходимо установить с помощью AufioManager:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setRingerMode(targetSoundMode);

Вторая часть не документирована должным образом, и я считаю, что это недостающая часть вашего кода:

String VIBRATE_IN_SILENT_SETTING_NAME = "vibrate_in_silent";
Settings.System.putInt(getContentResolver(), VIBRATE_IN_SILENT_SETTING_NAME, 1);

используйте 1 для включения вибрации и 0 для выключения вибрации.

Чтобы полностью понять, как работать с настройками вибрации и режимом, взгляните на следующую ссылку: http://hi -android.info / SRC / COM / Android / Настройки / SoundSettings.java.html

...