Android 如果项目包含子包,如何在清单中声明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"

我已经在一个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"
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"; 
    } 
}