Подтвердить что ты не робот

Как настроить индивидуальную вибрацию при определенных входящих вызовах

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

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

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

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

4b9b3361

Ответ 1

Вам нужно играть с двумя настройками, чтобы ваш телефон вибрировал. Первый - это звуковой режим, который необходимо установить с помощью 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/settings/SoundSettings.java.html