Как Intent может быть null в onHandleIntent ()?

Сбой приложения для Android и это ловушка: –

java.lang.NullPointerException at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:194) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.os.HandlerThread.run(HandlerThread.java:60) 

Я посмотрел в источник android gcm r3, и я обнаружил, что цель аргумента равна null в onHandleIntent ().

Возможно ли это? Как это исправить?

(Я знаю, что с помощью Service.onStartCopmmand возвращался START_STICKY но IntentService.onStartCommand не использует START_STICKY .

Solutions Collecting From Web of "Как Intent может быть null в onHandleIntent ()?"

Я думаю, что приложение врезается только на некоторых устройствах во время установки. Это связано с тем, что во время установки GCM-служба также получает некоторый Intent из другого источника Google, и ваш широковещательный приемник не готов обрабатывать этот тип Intent .

Если вы просто хотите получить GCM Intent, который хотите вытащить с сервера через push-уведомление, просто используйте это в своем вызове Intent.

 protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); //String msg = intent.getStringExtra("message"); String from=extras.getString("from"); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); String messageType = gcm.getMessageType(intent); if (!extras.isEmpty()) { if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendErrorNotification("Send error: " + extras.toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { sendErrorNotification("Deleted messages on server: " + extras.toString()); // If it's a regular GCM message, do some work. } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { // This loop represents the service doing some work. for (int i = 0; i < 5; i++) { Log.i(TAG, "Working... " + (i + 1) + "/5 @ " + SystemClock.elapsedRealtime()); try { Thread.sleep(500); } catch (InterruptedException e) { } } Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime()); // Post notification of received message. // sendNotification("Received: " + extras.toString()); /*********ERROR IN SOME DEVICES*****************/ if(from.equals("google.com/iid")) { //related to google ... DO NOT PERFORM ANY ACTION } else { //HANDLE THE RECEIVED NOTIFICATION String msg = intent.getStringExtra("message"); sendNotification(msg); Log.i(TAG, "Received: " + extras.toString()); } /**************************/ } } GcmBroadcastReceiver.completeWakefulIntent(intent); }