2010-06-24 28 views
18

Tengo un servicio en ejecución que actualiza una notificación en la barra de notificaciones cuando recibe un mensaje que dice que tiene que ser cambiado.Android - java.lang.IllegalArgumentException: contentIntent error requerido causado por la notificación?

Sin embargo, me sale el siguiente error a veces, cuando la notificación se va a actualizar

java.lang.IllegalArgumentException: contentIntent required 

Aquí está mi código:

configuración variable


int icon = R.drawable.notification; 
CharSequence tickerText = "Test"; 
long when = System.currentTimeMillis(); 
PendingIntent contentIntent; 

Notification notification = new Notification(icon, tickerText, when); 

NotificationManager mNotificationManager; 

NotificationManager Creación


String ns = Context.NOTIFICATION_SERVICE; 
    mNotificationManager = (NotificationManager) getSystemService(ns); 

Creación Notificación


Intent notificationIntent = new Intent(this, TestsApp.class); 
    contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
    notification.flags |= Notification.FLAG_NO_CLEAR; 
    notification.icon = R.drawable.notification3; 
    notification.setLatestEventInfo(this, "Registering", "Test", contentIntent); 
    mNotificationManager.notify(1, notification); 

Actualización de Notificación


notification.icon = R.drawable.notification2; 
    notification.setLatestEventInfo(getApplicationContext(), "Registered", "Test", contentIntent); 
    mNotificationManager.notify(1, notification); 

Así que algo está pasando mi contentIntent en algún momento, ¿sería correcto?

Se declara en la parte superior de mi clase de servicio como una variable miembro y no se utiliza en ningún otro lugar en el código aparte de lo mostrado anteriormente, entonces ¿dónde podría restablecerse a nulo?

Respuesta

15

necesita configurar el contenidoIntent para su notificación.

en su caso:

notification.contentIntent = notificationIntent; 

de lo contrario obtendrá el mensaje, que el contentIntent de la notificación es nula, ya que no se establece.

el docu está aquí: http://developer.android.com/reference/android/app/Notification.html#contentIntent

Tengo un pequeño ejemplo aquí: http://united-coders.com/nico-heid/show-progressbar-in-notification-area-like-google-does-when-downloading-from-android

+5

No todas las versiones de Android requieren esto. Tenía un caso que funcionaba bien en todo excepto en Kindle Fire. –

+4

¿Sabe lo que hago si no deseo intentar disparar al hacer clic en la notificación? Solo quiero que esté allí mientras el sistema está haciendo algo y todo irá por sí mismo. –

+0

para mi caso, que muestra notificación desde el servicio, que sería mBuilder.setContentIntent (PendingIntent.getActivity (this, 0, new Intent(), 0)); – toantran

2

En su caso

contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

si desea utilizar Intentos con la misma acción, pero diferentes extras:

1) Cambiar

requestCode

de defecto "0" en

getActivity (Context context, int requestCode, Intent intent, int flags)

a algo único como `

(int) System.currentTimeMillis();

` 2)

notification.contentIntent = notificationIntent;

Ambos pasos son obligatorios porque:

  • Opción 2 no funcionará sin la opción 1.
  • Opción 1 lanzará IllegalArgumentException sin 2.
0

En mi caso, tuve un código de ejemplo para hacer, con una única notificación para crear, y yo también tengo el error "contentIntent required" - google me trajo a este hilo: D

el origen de este problema fueron las citas que copié de un código de ejemplo y lo pegué en el proyecto eclipse. Cuando borré "" y los devolví y el problema fue resuelto. Tal vez esto ayude a alguien.

Estas fueron las cotizaciones fuente de error: nb.setContentTitle ("Mi primera notificación!"); nb.setContentText ("Hola");

3

creo que esto es debido a que el sistema operativo Android versión

La versión 2.3 o inferior , debe configurar contentIntent, si no, obtendrá esta excepción.

En mi proyecto, me escribe así:

if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { Intent intent = new Intent(); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); mNotification.contentIntent = contentIntent; }

Tal vez esto podría ayudarle!

Cuestiones relacionadas