Notificaciones push en android 2.3 se estrelló.

Estoy tratando de enviar notificaciones push a un teléfono con GCM, funciona bien en un dispositivo con Android 4, pero cuando intento enviar notificación sobre Android 2.3 la aplicación se estrelló y estoy recibiendo este error

03-13 11:44:25.994: E/AndroidRuntime(3579): FATAL EXCEPTION: IntentService[GCMIntentService-1074787013996-1] 03-13 11:44:25.994: E/AndroidRuntime(3579): java.lang.IllegalArgumentException: contentIntent required: pkg=com.itom.vreauRCA id=0 notification=Notification(vibrate=default,sound=default,defaults=0xffffffff) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1251) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1235) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:110) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:90) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.generateNotification(GCMIntentService.java:71) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.onMessage(GCMIntentService.java:36) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Handler.dispatchMessage(Handler.java:99) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Looper.loop(Looper.java:123) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.HandlerThread.run(HandlerThread.java:60) 03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE 03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService 03-13 11:44:26.374: V/GCMBaseIntentService(3579): Acquiring wakelock 03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE 03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService 03-13 11:44:26.414: V/GCMBaseIntentService(3579): Acquiring wakelock 

Esta es mi clase GCMBaseIntentService

 import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; import com.google.android.gcm.GCMBaseIntentService; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; PendingIntent contentIntent; public GCMIntentService() { super(GetObiecte.SENDER_ID); } @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered: regId = " + registrationId); Log.d("GCMIntentService", "in GCMIntentService"); } @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "Device unregistered"); } @Override protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String a = intent.getStringExtra("data"); String b = intent.getStringExtra("data2"); generateNotification(context, a,b); } @Override protected void onDeletedMessages(Context context, int total) { Log.i(TAG, "Received deleted messages notification"); } @Override public void onError(Context context, String errorId) { Log.i(TAG, "Received error: " + errorId); } @Override protected boolean onRecoverableError(Context context, String errorId) { Log.i(TAG, "Received recoverable error: " + errorId); return super.onRecoverableError(context, errorId); } private void generateNotification(Context context, String message, String title) { NotificationManager notificationManager = (NotificationManager) context .getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.icon = R.drawable.ic_launcher; notification.tickerText = "i-Asigutare"; notification.defaults = Notification.DEFAULT_ALL; notification.setLatestEventInfo(context, title, message, null); notificationManager.notify(0, notification); } } 

El problema es sobre el método notification.setLatestEventInfo.

Este método fue obsoleto en el nivel 11 de API y se recomienda el uso de Notification.Builder . También puede consultar NotificationCompat.Builder para su uso con la biblioteca de soporte.

Si todavía quieres ir con tu camino, deberías mirar la respuesta aceptada en esta pregunta: Android – administrador de notificaciones, tener una notificación sin intención

Que establece claramente que el uso de este tipo

 notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0)); 

notification.setLatestEventInfo(context, title, message, null); En lugar de null hay que agregar un Intent, que se iniciará, cuando el usuario toque la notificación.

Desde la página de desarrollo de Android :

ContentIntent: La intención de iniciar cuando el usuario hace clic en la notificación expandida. Si se trata de una actividad, debe incluir el indicador FLAG_ACTIVITY_NEW_TASK, que requiere que se encargue de la administración de tareas tal y como se describe en el documento Tareas y pila posterior.

  • FCM push notification issue: - "error": "NotRegistered"
  • Los dispositivos Android 4.x reciben mensajes GCM, pero los dispositivos Android 2.3
  • MQTT Eclipse Paho cliente en Android, desconectar se bloquea y nunca termina
  • Notificación push en Amazon Android
  • Abra la actividad haciendo clic en la notificación push de Parse
  • Cómo implementar XMPP para enviar notificaciones push
  • Android: error "no coinciden con el identificador del remitente", mientras que presionar la notificación al dispositivo Android a través de PHP y GCM
  • Notificación de Push en Android?
  • ¿Debería llamar a WakeLock antes de crear una notificación?
  • Android, notificación Push mediante parse.com, inicia automáticamente la aplicación
  • Iniciar la aplicación sólo si no está en ejecución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.