PhoneStateListener onMessageWaitingIndicatorChanged () не называется надежно

У меня есть код, который обнаруживает, когда появляется новая голосовая почта. Он основан на реализации PhoneStateListener.onMessageWaitingIndicatorChanged() (так что технически он срабатывает только при изменении индикатора MWI, не обязательно для каждой новой голосовой почты).

Он работает отлично в течение многих месяцев до обновления 4.xx для устройств.

Теперь это работает, когда устройство перезагружается, в противном случае оно очень ненадежно. Я вижу, что значок голосовой почты появляется на панели уведомлений, но журналы отладки onMWIChanged остаются безмолвными.

Я знаю, что с 4.xx существует API-провайдер voicemail. Думая, что это может иметь соединение, я добавил android.intent.action.NEW_VOICEMAIL и android.intent.action.PROVIDER_CHANGED для моего получателя, но они не срабатывают (в моем BroadcastReceiver onReceive ) либо (мое приложение minSdkVersion равно 8 ).

Это сообщение от разработчиков Android о API 4.0 для Android.

http://developer.android.com/about/versions/android-4.0.html

Если вы прокрутите вниз, появится раздел о Провайдерах голосовой почты, где он объясняет:

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

Тем не менее, я предполагаю, что если вы пытаетесь получать голосовые сообщения от третьего лица, а не от своей службы, это может быть возможно. Просмотрите эту ссылку о VoicemailContracts, где я считаю, что вам нужно разрешение ADD_VOICEMAIL в вашем манифесте, чтобы использовать действия, которые вы используете выше.

http://developer.android.com/reference/android/provider/VoicemailContract.html

Есть также образцы, на которых у меня не было возможности посмотреть демоверсию Voicemail Provider в вашем SDK. Надеюсь, это поможет.

Для этого требуется разрешение READ_PHONE_STATE. Хотя, если это сработало, прежде чем вы это сделаете.

См. LISTEN_MESSAGE_WAITING_INDICATOR .