Android 如果项目包含子包,如何在清单中声明gcminentservice的名称?
我已经在一个GCM项目上,注册后可以从谷歌服务器接收和发送消息 这个项目只包含一个包(com.example.gcm),所有类(gcminentservice…)都在这个包中声明。下面的代码描述了我的清单文件Android 如果项目包含子包,如何在清单中声明gcminentservice的名称?,android,google-cloud-messaging,android-c2dm,Android,Google Cloud Messaging,Android C2dm,我已经在一个GCM项目上,注册后可以从谷歌服务器接收和发送消息 这个项目只包含一个包(com.example.gcm),所有类(gcminentservice…)都在这个包中声明。下面的代码描述了我的清单文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="YOUR PACKAGE NAME"
<?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类:您的包名.gcminentService,该类不正确,因为该类位于子包中
如果我更改了服务的名称并输入了软件包的全名,我会得到以下结果:
无法启动服务意图{
act=com.google.android.c2dm.intent.REGISTRATION cat=[xxx]flg=0x10
cmp=xxxx(有附加项)}:未找到
我已经读了很多文章,但没有任何帮助
有办法解决这个问题吗
想想看,这应该会帮助您定义自己的接收方类,然后将其添加到AndroidManifest.xml中
“你的包裹名称”真的不在清单上吗?否则,您必须将其更改为“com.example.gcm”Thks作为注释,但“您的包名”只是一个示例,当然它不是清单。是否尝试将您的gcminentservice移动到包根目录?如果不重写“GetGCMinentServiceClassName”,请尝试使用它。这似乎很有帮助,但我得到了以下信息:找不到方法com.google.android.gcm.GCMBaseIntentService.,引用自方法www.induct.fr.schedule.gcminentservice。。java.lang.NoSuchMethodError:com.google.android.gcm.GCMBaseIntentService.Awesome!这有帮助。谢谢
public class GCMReceiver extends GCMBroadcastReceiver {
@Override
protected String getGCMIntentServiceClassName(Context context) {
return "com.example.gcm.GCMService";
}
}