我遇到同样的问题。 GCM在运行Android 4.04的平板电脑上运行正常,但在我运行Android 2.3的智能手机上始终会收到SERVICE_NOT_AVAILABLE。
我发现以下解决方法不使用(据我所知)任何不推荐的类。将操作“com.google.android.c2dm.intent.REGISTRATION”添加到清单中的GCMBroadcastReceiver。这将可以在您的GCMBroadcastReceiver上接收registration_id。
android:name="YOUR_PACKAGE_NAME.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
之后,您的GCMBroadcastReceiver能够接收registration_id:
public void onReceive(Context context, Intent intent) {
String regId = intent.getExtras().getString("registration_id");
if(regId != null && !regId.equals("")) {
/* Do what ever you want with the regId eg. send it to your server */
}
}
虽然我仍然得到一个SERVICE_NOT_AVAILABLE错误,我可以处理我的GCMBroadcastReceiver的registration_id,我可以发送消息到我的智能手机。很奇怪,但它适用于我。