Android:确定是否收到广播

标签 android broadcastreceiver android-c2dm google-cloud-messaging

我正在开发一个讨论图片的聊天应用程序。 当我收到一条 c2dm 消息时,有效负载包含该消息和一个 md5,它标识该消息所涉及的图片。当具有匹配 md5 的 ChatActivity 位于前台时,我只想播放声音。如果不是,我想在通知栏中添加一个通知。

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

最佳答案

ChatActivity 注册一个 BroadcastReceiver 来接收 C2DM 消息,除了让您现有的 list 注册 BroadcastReceiver 来接收 C2DM 消息.让 registerReceiver() 中的 ChatActivity 使用的 IntentFiltersetPriority() 使用正值,因为默认为0。在onResume()onStart()中使用registerReceiver(),并使用unregisterReceiver()onPause()onStop() 中。

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

Here is a sample app这证明了大部分内容。广播来自应用程序本身,而不是 C2DM,但结构的其余部分几乎相同。

关于Android:确定是否收到广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819384/

相关文章:

android - 错误 YouTubePlayerView XML

android - 为 Google Maps Android API 标记着色

c# - 在包含的布局的 TextView 中添加点击监听器

android - 从另一个应用程序启动一个 Android 应用程序

android - C2DM 验证错误

android - 在 Ubuntu 16.04 操作系统的 Android Studio 中选择 Dracula 主题时无法读取文本

android - 从android中的GCM Intent Service无休止地获取通知

Android:每秒更新蓝牙rssi

android - 在 Android 中注册 C2DM 时出现问题

java - C2DM寄存器频率