所以,对于在较低版本的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
并且没有进一步的回应。
答案 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,这是我必须做的才能使它工作。