1

我正在讨论讨论图片的聊天应用程序。 当我收到一个c2dm消息时,有效载荷包含消息和一个md5,标识这个消息是关于图片的。当具有匹配md5的ChatActivity处于前景中时,我只想播放声音。如果不是,我想向通知栏添加通知。Android:确定是否收到广播

这与whatsapp的行为相同。如何实现这一点?

+0

你为此尝试过些什么? – AAnkit 2012-08-05 19:39:51

+0

由于只有一个ChatActivity实例可以存在,我试过这个黑客:我使ChatActivity的md5成员为public static。每当我收到消息时,我都会将收到的md5与活动的md5进行比较。这在大多数情况下工作。当没有ChatActivity启动时,md5为空,当活动处于活动状态时,md5是显示图片的md5。我可以在活动的onPause()中将md5变回null,并在onResume()中恢复它。我想这是可以接受的。但限制是我永远不会有多个chatactivity实例。 – 2012-08-05 19:55:14

回答

2

ChatActivity注册一个BroadcastReceiver以接收C2DM消息,此外还有C2DM消息的现有清单注册BroadcastReceiver。在registerReceiver()中使用的ChatActivityIntentFilter使用正值为setPriority(),作为默认为0。使用registerReceiver()onResume()onStart(),并在onPause()onStop()使用unregisterReceiver()

结果是,当C2DM消息到达时,如果您的ChatActivity位于前台,由于优先级较高,它将首先获取消息。它可以检查消息是否与其图像有关。如果是,ChatActivityBroadcastReceiver可以调用abortBroadcast(),以防止您的标准优先级清单注册的接收器获得广播。因此,如果您的舱单注册接收机确实获得了广播,则您知道在前台没有相关的ChatActivity,并且它可以提高Notification

Here is a sample app这说明了这一点。广播来自应用程序本身,而不是C2DM,但其余结构几乎相同。

+0

一如既往,清晰完整的答案。坦克! – 2012-08-07 14:46:24