我正在开发一个讨论图片的聊天应用程序。 当我收到一条 c2dm 消息时,有效负载包含该消息和一个 md5,它标识该消息所涉及的图片。当具有匹配 md5 的 ChatActivity 位于前台时,我只想播放声音。如果不是,我想在通知栏中添加一个通知。
这与 whatsapp 的行为相同。如何实现?
最佳答案
让 ChatActivity
注册一个 BroadcastReceiver
来接收 C2DM 消息,除了让您现有的 list 注册 BroadcastReceiver
来接收 C2DM 消息.让 registerReceiver()
中的 ChatActivity
使用的 IntentFilter
为 setPriority()
使用正值,因为默认为0。在onResume()
或onStart()
中使用registerReceiver()
,并使用unregisterReceiver()
在 onPause()
或 onStop()
中。
结果是,当 C2DM 消息到达时,如果您的 ChatActivity
在前台,由于优先级较高,它会首先收到消息。它可以检查消息是否与其图像有关。如果是,ChatActivity
的 BroadcastReceiver
可以调用 abortBroadcast()
,以防止您的标准优先级 list 注册接收器获取广播。因此,如果您的 list 注册接收器确实收到了广播,您就知道前台没有相关的ChatActivity
,它可以引发Notification
.
Here is a sample app这证明了大部分内容。广播来自应用程序本身,而不是 C2DM,但结构的其余部分几乎相同。
关于Android:确定是否收到广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819384/