PhoneStateListener onMessageWaitingIndicatorChanged() не называется надежно
У меня есть код, который обнаруживает, когда есть новая голосовая почта. Он основан на реализации PhoneStateListener.onMessageWaitingIndicatorChanged()
(так что технически он срабатывает только при изменении индикатора MWI, не обязательно для каждой новой голосовой почты).
Он работает отлично в течение многих месяцев до обновления 4.x.x для устройств.
Теперь это работает, когда устройство перезагружается, в противном случае оно очень ненадежно. Я вижу, что значок голосовой почты появляется на панели уведомлений, но журналы отладки в onMWIChanged
остаются в силе.
Я знаю, что с 4.x.x существует API-провайдер voicemail. Думая, что это может иметь соединение, я добавил намерения android.intent.action.NEW_VOICEMAIL
и android.intent.action.PROVIDER_CHANGED
к моему получателю, но они не срабатывают (в моем BroadcastReceiver
onReceive
) либо (мое приложение minSdkVersion равно 8).
Ответы
Ответ 1
Это сообщение от разработчиков Android о API Android 4.0.
http://developer.android.com/about/versions/android-4.0.html
Если вы прокрутите вниз, появится раздел о Поставщиках голосовой почты, где он объясняет:
Поскольку API в настоящее время не позволяет сторонним приложениям читать все голосовые сообщения из системы, единственными сторонними приложениями, которые должны использовать API-интерфейсы voicemail, являются те, у которых есть голосовой почтовый ящик для доставки пользователю.
Однако я предполагаю, что если вы пытаетесь получать голосовые сообщения от третьего лица, а не от своей службы, это может быть возможно. Просмотрите эту ссылку о VoicemailContracts, где я считаю, что вам нужно разрешение ADD_VOICEMAIL в манифесте, чтобы использовать действия, которые вы используете выше.
http://developer.android.com/reference/android/provider/VoicemailContract.html
Есть также образцы, на которых я не получил возможность посмотреть в Демо-версия поставщика голосовой почты. Надеюсь, это поможет.
Ответ 2
Для этого требуется разрешение READ_PHONE_STATE. Хотя, если это сработало, прежде чем вы это сделаете.
См. LISTEN_MESSAGE_WAITING_INDICATOR.