1

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

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

编辑:
这是我在日志猫中得到的:

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

并且没有进一步的回应。

4

1 回答 1

3

好的,我自己想通了。以防万一其他人将来遇到这个问题;
我将尝试解释问题所在。
所以我有一个带有 GCM 集成的库项目,比如com.test.gcm-library。我想在另一个应用程序项目中使用这个库,比如com.example.gcmtest。通过遵循此处接受的答案,我设法在我的com.example.gcmtest中成功使用了该库项目。它在 API 级别 17 上运行良好,但是当我在 api 级别 10 上尝试它时,没有一个 GCMIntenetService 方法会被调用,也不会产生任何响应,因为我在我的问题中发布了但我最终设法修复了它。诀窍是在清单文件中更改接收者的意图类别。准确地说,我从以下更改了 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,这是我必须做的才能使其工作。

于 2013-08-29T14:06:51.640 回答