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

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

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

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

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

22
задан Artjom B. 17 March 2015 в 16:05
поделиться