在做gcm的时候,会遇到,有时候可以push信息成功,有时候不可以,并且会出现以下senderId接收不到的异常:
12-11 14:07:02.363: E/GCMRegistrar(10954): internal error: retry receiver class not set yet
12-11 14:07:09.023: E/AndroidRuntime(10954): FATAL EXCEPTION: IntentService[GCMIntentService-DynamicSenderIds-4]
12-11 14:07:09.023: E/AndroidRuntime(10954): java.lang.IllegalStateException: sender id not set on constructor
12-11 14:07:09.023: E/AndroidRuntime(10954): at com.google.android.gcm.GCMBaseIntentService.getSenderIds(GCMBaseIntentService.java:125)
12-11 14:07:09.023: E/AndroidRuntime(10954): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:237)
12-11 14:07:09.023: E/AndroidRuntime(10954): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
12-11 14:07:09.023: E/AndroidRuntime(10954): at android.os.Handler.dispatchMessage(Handler.java:99)
12-11 14:07:09.023: E/AndroidRuntime(10954): at android.os.Looper.loop(Looper.java:137)
12-11 14:07:09.023: E/AndroidRuntime(10954): at android.os.HandlerThread.run(HandlerThread.java:60)
找了好久原因,也不知道如何解决,最后无意中找到了答案,跟大家分享一下,希望为遇到相同问题的人提供帮助:
解决方案是在GCMIntentService.java中去重写一下getSenderIds和onRegistered这二个方法:
@Override
protected String[] getSenderIds(Context context) {
String[] ids = new String[1];
ids[0] = ConstantUtil.SENDER_ID;
return ids;
}
@Override
protected void onRegistered(Context context, String regId) {
Intent intent = new Intent(ConstantUtil.ACTION_ON_REGISTERED);
intent.putExtra(ConstantUtil.FIELD_REGISTRATION_ID, regId);
this.mcontext = context;
context.sendBroadcast(intent);
}
后来就没有再遇到过这样的异常了.