PhoneStateListener onMessageWaitingIndicatorChanged()没有被可靠地调用

我有一些代码来检测何时有新的语音信箱。 它基于PhoneStateListener.onMessageWaitingIndicatorChanged()实现(因此技术上它只在MWI指示符发生变化时触发,不一定针对每个新的语音邮件)。

它已经完美地运行了很多个月,直到4.xx更新到设备。

现在,当设备重新启动时,这是有效的,否则它非常不可靠。 我可以看到通知栏中显示了语音邮件图标,但是onMWIChanged的debugging日志保持沉默。

我知道4.xx有一个语音邮件提供程序API。 考虑到这可能有一个连接,我添加了android.intent.action.NEW_VOICEMAILandroid.intent.action.PROVIDER_CHANGED意图到我的接收器,但他们不会触发(在我的BroadcastReceiver onReceive )要么(我的应用程序的minSdkVersion是8 )。

这是Android开发者关于Android 4.0 API的文章。

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

如果向下滚动,则会有一段关于语音邮件提供商的部分,其中解释了:

由于API目前不允许第三方应用程序读取系统中的所有语音邮件,因此唯一使用语音邮件API的第三方应用程序是那些有语音邮件提供给用户的应用程序。

但是,我假设您尝试接收来自第三方的语音邮件,而不是您的服务,那么这仍然是可能的。 看看这个有关VoicemailContracts的链接,我相信它说你需要清单中的权限ADD_VOICEMAIL来使用上面使用的操作。

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

还有一些示例我没有机会看到您的SDK中称为语音邮件提供程序演示 。 我希望这有帮助。

它确实需要READ_PHONE_STATE权限。 虽然,如果它的工作之前,你一定要设置。

请参阅LISTEN_MESSAGE_WAITING_INDICATOR 。

Interesting Posts