Android 区分具有相同动作的广播接收器

Android 区分具有相同动作的广播接收器,android,broadcastreceiver,google-cloud-messaging,android-broadcast,Android,Broadcastreceiver,Google Cloud Messaging,Android Broadcast,情况如下: 该做什么: 我有两个用于GCM消息的广播接收器,它们都具有相同的权限,正在侦听注册和接收操作。 现在,一个广播接收器正在侦听我自己的服务器,另一个广播接收器应该正在侦听来自第三方服务器的gcm消息 问题 由于它们都在侦听gcm消息,因此每当传入推送通知时,都会调用这两个接收器。如何配置接收器,使其中一个只侦听我的服务器,另一个只侦听第三方服务器 如何配置接收器,使其中一个只侦听我的服务器,另一个只侦听第三方服务器 这是不可能的。您不能根据GCM邮件内容或原始发件人设置。你的选择是:

情况如下:

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

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

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

这是不可能的。您不能根据GCM邮件内容或原始发件人设置
。你的选择是:

  • 为应用程序的所有GCM消息调用两个
    BroadcastReceivers

  • 根据我的评论,只有一个
    广播接收器

  • 消除一个消息源

  • 将一个消息源迁移到GCM以外的其他位置

  • 筹集3907.6亿美元,收购谷歌,并迫使他们设计一个解决方案,允许基于消息内容或发起者的不同元素。请注意,实际美元数字可能因市场条件而异,不包括经纪费或法律费用。投资前请咨询您的财务顾问

  • 您可以在每个推送中发送自定义“操作”吗?然后可以根据操作进行筛选

    <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
    来检查消息,然后将工作委托给应该处理它的任何人呢?是的,这是一个很好的方法,但是安全性要求阻止be这样做,并规定这不是一个选项,不幸的是,否则我会从那里创建一个类和委托接收者。但是谢谢你的回复。!是的,@commonware建议这可能是唯一的方法。关于设置广播接收机的优先级有什么想法吗?将“高”设置为一个,将“低”设置为另一个,可以通过操纵来实现此目标吗?还有@commonware对于相同的操作使用两个BroadcastReceiver的缺点是什么?因为根据GoogleAnalytics“每个应用程序只能指定一个广播接收器”,GCM是控制动作字符串的一个,因为播放服务引擎是发送广播的引擎。啊,在这种情况下,单个
    广播接收器的解决方案是最好的选择。1。这个答案写完后有什么变化吗?2.关于这个问题有权威的文档链接吗?谢谢@阿达玛坦:“这个答案写出来后有什么变化吗?”——有一个新的答案,但似乎无法解决OP的担忧。否则,没有。“关于这个问题有权威的文档链接吗?”--我对此表示怀疑,因为有无数不受支持的东西(“有关于让一碗通心粉和奶酪接收GCM消息的文档吗?”)@commonware谢谢。1.你可能会感兴趣。2.当你以糖果命名你的版本时,是的,一些mac和奶酪会很受欢迎!