GCM在图书馆项目中的Android 4下面发布

时间:2013-08-29 07:47:13

标签: android google-cloud-messaging

所以,对于在较低版本的android上运行的设备上的GCM,我有这个非常奇怪的问题。我有一个启用了GCM的android库项目。我将其导出为jar,然后将其包含在测试应用程序中。它适用于api level 17的设备和模拟器,并且设备已成功注册,但它不能在下面工作。现在这里有一个奇怪的部分:如果我将库项目作为独立项目运行,它可以在包括api级别10在内的所有设备上正常工作。是否有任何人知道可能是什么原因?

注意:使用库对我来说很重要。

修改
这就是我在我的日志猫中得到的:

    D/GCMRegistrar(505): resetting backoff for com.example.gcmtest
    V/GCMRegistrar(505): Registering app com.example.gcmtest of senders 378013620721

并且没有进一步的回应。

1 个答案:

答案 0 :(得分:3)

好的,我自己想通了。以防万一其他人将来面临这个问题; 我会试着解释这个问题是什么 所以我有一个GCM集成的图书馆项目说 com.test.gcm-library 。我想在另一个应用程序项目中使用此库,如 com.example.gcmtest 。按照接受的答案here,我设法在我的 com.example.gcmtest 项目中成功使用该库。它在API级别17下运行良好,但是当我尝试使用api级别10时,没有任何GCMIntenetService方法会被调用,也不会生成任何响应,因为我在我的问题中发布但最终设法修复它。诀窍是在清单文件中更改接收器的intent类别。确切地说,我改变了 com.example.gcmtest 的清单文件中的接收者声明:

    <receiver
        android:name="com.test.gcm-library.MyCustomBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.test.gcm-library" />
        </intent-filter>
    </receiver>  

到此:

    <receiver
        android:name="com.test.gcm-library.MyCustomBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.example.gcmtest" />
        </intent-filter>
    </receiver>

我不知道为什么,但接收器类别字段看起来像API 17的“不关心”条件,但对于较低的API,这是我必须做的才能使它工作。