Как обеспечить индивидуальную вибрацию на конкретных входящих вызовах
-
25-10-2019 - |
Вопрос
Программа функционирует, подобные этим: у пользователя есть список телефонов, для которых мобильный телефон может вибрировать при входящем вызове только тогда, когда ни одно другое общеобразовательное приложение не обеспечит вибрацию (например, в режиме отключения). Я знаю, что это каким -то образом против правил, поскольку приложение должно уважать настройки пользователей, но приложение ограничено некоторыми пользователями с этой потребностью. Я пробовал два способа, но ни один из них не удовлетворяет:
Слушайте состояние телефона и напрямую запускает сервис вибрации с помощью моего собственного шаблона (с
Vibrator.vibrate()
) Этот метод эффективен без входящих вызовов, но случайно эффективен, когда телефон находится вCALL_STATE_RINGING
Государство, и я думаю, это из-за конфликта с общесистемным применением, которое фактически обрабатывает вибрацию при входящем вызове.Судить, вибрирует ли мобильный телефон при входящем вызове (с
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