我有使用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上测试了它。
答案 0 :(得分:0)
你说你的图书馆的软件包是com.sennin,但是在清单中你在接收者和服务的声明中有com.sennin.app。哪一个。不匹配可能解释您的问题,因为清单中声明的接收器不存在,因此无法启动。