3

我已经参与了一个 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) }:未找到

我已经阅读了很多帖子,但没有任何帮助。

有没有办法解决这个问题?

4

2 回答 2

3

想想,这应该会帮助你http://dexxtr.com/post/28188228252/rename-or-change-package-of-gcmintentservice-class

于 2013-04-23T11:05:30.503 回答
1

You should define your own Receiver class, Then add it to your AndroidManifest.xml

public class GCMReceiver extends GCMBroadcastReceiver { 
    @Override
    protected String getGCMIntentServiceClassName(Context context) { 
        return "com.example.gcm.GCMService"; 
    } 
}
于 2013-09-14T13:29:44.400 回答