android - notificaciones - ¿Cómo podría la intención ser nula en onHandleIntent()?
notificaciones push android google cloud messaging(gcm) (2)
Creo que la aplicación se bloquea solo en algunos dispositivos durante el tiempo de instalación. Esto se debe a que durante la instalación, el servicio GCM también recibe algunas Intent
de otras fuentes de Google y su receptor de difusión no está preparado para manejar este tipo de Intent
.
Si solo desea recibir GCM Intent que desea extraer del servidor a través de una notificación push, entonces use esto en su identificador de Intent Call.
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);
}
Mi aplicación de Android falla y esta es la logcat: -
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)
Busqué en la fuente de Android gcm r3 y encontré que la intención del argumento es nula en onHandleIntent ().
¿Es esto posible? ¿Como arreglarlo?
(Sé que se puede ver una intención nula con Service.onStartCopmmand
devuelve START_STICKY
pero IntentService.onStartCommand
no usa START_STICKY
).
Pasó a mí una vez, me estaba pasando URI mal. Haz referencia a la documentación para el intento que quieres pasar.