android中的两个gcm接收器
Posted
技术标签:
【中文标题】android中的两个gcm接收器【英文标题】:two gcm receiver in android 【发布时间】:2014-08-25 08:26:33 【问题描述】:我有两个广播接收器和两个推送服务,并且我已经在清单文件中注册了两个接收器。
接收器 1
<receiver
android:name="com.esri.android.geotrigger.MessageReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.esri.android.geotrigger" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data
android:path="com.brillio.beaconservice"
android:scheme="package" />
</intent-filter>
</receiver>
接收器 2
<receiver
android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.brillio.beaconservice" />
</intent-filter>
</receiver>
如果我评论一个接收者并运行我的应用程序,我会正确收到推送通知,
问题是当两个接收器都存在时,我没有收到推送通知。
【问题讨论】:
加2个receiver的目的是什么? 我有两个应用服务器发送两种不同类型的推送数据 那你为什么不在接收器上添加检查呢?两个接收器一定不能工作。 如何区分推送是否来自特定的应用服务器? 在 json 数据中添加一个包含服务器类型值的键。在解析时,您的任务取决于该值。 【参考方案1】:我已经通过动态启用和禁用接收器解决了这个问题
使用这个http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
ComponentName receiver = new ComponentName(context, myReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
【讨论】:
这些代码示例是在哪里编写的?它是在你的 mainApplication 还是 Main Activity 中? 您可以在任何地方使用此代码,在活动或应用程序中。它只需要一个 Context 对象以上是关于android中的两个gcm接收器的主要内容,如果未能解决你的问题,请参考以下文章
Android - 一个应用程序中有两个或多个 GCM 令牌
Pushwoosh / GCM - Android - 不接收消息
Android 26无法启动接收器com.google.android.gcm.GCMBroadcastReceiver:java.lang.IllegalStateException:不允许启动服务