我已经参与了一个 GCM 项目,该项目能够在注册后从 Google 服务器接收和发送消息。
这个项目只包含一个包(com.example.gcm),所有的类(GCMIntentService ...)都在这个包中声明。下面的代码描述了我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="YOUR PACKAGE NAME"
android:versionCode="1"
android:versionName="1.0" >
....
<receiver
android:name="com.google.android.gcm.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="YOUR PACKAGE NAME" />
</intent-filter>
</receiver>
<service android:name=".GCMIntentService" />
现在我正在尝试将此 GCM 项目集成到我的主项目中,该项目至少包含 4 个子包。我采用了与 Manfiest 相同的配置,我得到了类似的东西
....
<receiver
android:name="com.google.android.gcm.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="YOUR PACKAGE NAME" />
</intent-filter>
</receiver>
<service android:name=".notification.GCMIntentService" />
在 logcat 中,我得到了 GCM IntentService class: YOUR PACKAGE NAME.GCMIntentService这是不正确的,因为该类位于子包中。
如果我更改服务的名称并输入包的全名,我会得到这个:
无法启动服务 Intent { act=com.google.android.c2dm.intent.REGISTRATION cat=[ xxx ] flg=0x10 cmp=xxxx (has extras) }:未找到
我已经阅读了很多帖子,但没有任何帮助。
有没有办法解决这个问题?