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

StackOverflow https://stackoverflow.com/questions/8800348

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top