GCMBroadcastReceiver未被解雇

时间:2013-10-11 08:59:08

标签: android google-cloud-messaging

我有使用GCM的库项目。我试图在没有gcm.jar的情况下使用不弃用的方式。让我们从应用程序项目(而不是库)的清单开始:

这里我有套装

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sennin.app"

我在这里创建了我的许可:

<permission android:name="com.sennin.app.permission.C2D_MESSAGE" android:protectionLevel="signature" />

在这里我和其他人一起使用:

<uses-permission android:name="com.sennin.app.permission.C2D_MESSAGE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这是接收者和IntentService条目:

 <receiver android:name="com.sennin.app.SenninGCMBroadcastReceiver" 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="com.sennin.app" />
   </intent-filter>
</receiver>
<service android:name="com.sennin.app.GCMIntentService" />

我知道接收器操作com.google.android.c2dm.intent.REGISTRATION在理论上是多余的,但这是使用旧设备进行注册的方法(顺便说一下,在stackoverflow上找到)。

我需要添加我的库包com.sennin

好了,现在让我们去接收器:

public class SenninGCMBroadcastReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("GCM", "RECEIVE GCM");
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

在第一行onReceive方法中,正如您所见Log。此日志很重要,我想要的是在logcat;)

中查看此日志

我省略了消息传递过程的注册部分,因为注册工作正常。我有registration_id我将它发送到服务器。在服务器站点上,我将registration_id添加到数据存储区。之后我只是想发送一些消息。我可以在服务器端看到该消息已发送。我有message_id,没有错误。一切似乎都很好,但接收器永远不会被召唤。我希望看到这个登录onReceive()方法,但它永远不会发生。

有没有明显的错误?也许我只是不想找到它;)

我想补充一点,我已经在Android 2.3和Android 4.0.3上测试了它。

1 个答案:

答案 0 :(得分:0)

你说你的图书馆的软件包是com.sennin,但是在清单中你在接收者和服务的声明中有com.sennin.app。哪一个。不匹配可能解释您的问题,因为清单中声明的​​接收器不存在,因此无法启动。