【问题标题】:Differentiate between Broadcast Receivers with same actions区分具有相同操作的广播接收器
【发布时间】:2014-08-06 08:02:21
【问题描述】:

情况如下:

怎么办: 我有两个用于 GCM 消息的广播接收器,它们都具有相同的权限,并且正在侦听 REGISTRATION 和 RECEIVE 操作。 现在一个广播接收器正在监听我自己的服务器,而另一个广播接收器应该正在监听来自第三方服务器的 gcm 消息。

问题 由于它们都在收听 gcm 消息,因此每当推送通知进来时,都会调用两个接收器。如何配置接收器,使其中一个只监听我的服务器,另一个只监听第三方服务器

【问题讨论】:

  • “现在一个广播接收器正在监听我自己的服务器,而另一个广播接收器应该正在监听来自第三方服务器的 gcm 消息”——为什么?为什么没有一个 BroadcastReceiver 来检查消息,然后将工作委托给应该处理它的任何人?
  • 是的,这是一种很好的方法,但是安全要求阻止了这样做,并且不幸的是,这不是一个选项,否则我会创建一个类并从那里委托接收者。不过谢谢你的回复!
  • 是的,正如@CommonsWare 建议的那样,这可能是唯一的方法。关于为广播接收器设置优先级的任何想法?将高设置为一个,将其设置为低,可以操纵它来实现这个目标吗?
  • 另外@CommonsWare 有两个 BroadcastReceiver 用于相同的操作有什么缺点?因为根据 GoogleAnalytics “每个应用程序只能指定一个广播接收器”

标签: android broadcastreceiver google-cloud-messaging android-broadcast


【解决方案1】:

如何配置接收器,使其中一个只监听我的服务器,另一个只监听第三方服务器

这是不可能的。您不能根据 GCM 消息内容或发起者设置<intent-filter>。您的选择是:

  1. 为您的应用程序的所有 GCM 消息调用 BroadcastReceivers

  2. 根据我的评论,只有一个 BroadcastReceiver

  3. 消除一个消息来源。

  4. 将消息的一个来源迁移到 GCM 以外的其他地方。

  5. 筹集 3907.6 亿美元,收购 Google,并迫使他们设计一种解决方案,以允许基于消息内容或发起者的不同 BroadcastReceiver <intent-filter> 元素。请注意,实际美元数字可能因市场情况而异,不包括经纪或法律费用。请在投资前咨询您的财务顾问。

【讨论】:

  • 1.写完这个答案后有什么变化吗? 2. 有没有关于这个问题的权威文档链接?谢谢!
  • @AdamMatan:“自从写下这个答案后有什么变化吗?” - 有一个新的topic feature added in GCM 3.0,但这似乎无法解决 OP 的问题。否则,没有。 “有没有关于这个问题的权威文档链接?” -- 我对此表示怀疑,因为有无数种不受支持的东西(“是否有关于让一碗通心粉和奶酪接收 GCM 消息的文档?”)。
  • @CommonsWare 谢谢。 1.您可能对with this bounty感兴趣。 2. 当你用糖果命名你的版本时,是的,一些通心粉和奶酪会很受欢迎!
【解决方案2】:

您可以在每次推送中发送自定义“操作”吗?然后您可以根据操作进行过滤。

<receiver android:name=".MyCustomReceiver" android:exported="false">
    <intent-filter>
        <action android:name="com.example.MY_CUSTOM_ACTION" />
    </intent-filter>
</receiver>

<receiver android:name=".MyCustomReceiver2" android:exported="false">
    <intent-filter>
        <action android:name="com.example.MY_CUSTOM_ACTION2" />
    </intent-filter>
</receiver>

【讨论】:

  • GCM 是控制动作字符串的一方,因为播放服务引擎是发送广播的一方。
  • 啊,在这种情况下,您的单个BroadcastReceiver 的解决方案是最好的选择。
猜你喜欢
  • 2012-02-26
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2022-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多