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 令牌

我们是不是应该在 gcm (Android) 中注销接收器

如何分享两个Android应用程序的GCM服务?

Pushwoosh / GCM - Android - 不接收消息

GCM 会在 2.1 中崩溃 Android 应用程序吗?

Android 26无法启动接收器com.google.android.gcm.GCMBroadcastReceiver:java.lang.IllegalStateException:不允许启动服务