2010-06-24 16 views
18

Ho un servizio in esecuzione che aggiorna una notifica nella barra di notifica quando riceve un messaggio che dice che deve essere cambiato.Android - java.lang.IllegalArgumentException: contentIntent errore richiesto causato dalla notifica?

Tuttavia ho il seguente errore a volte quando la notifica deve essere aggiornata

java.lang.IllegalArgumentException: contentIntent required 

Ecco il mio codice:

configurazione variabile


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

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

NotificationManager mNotificationManager; 

NotificationManager creazione


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

Creazione di notifica


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); 

Aggiornamento della notifica


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

Quindi qualcosa sta accadendo mia contentIntent da qualche parte lungo la linea, vorrei che essere corretto?

Viene dichiarato nella parte superiore della mia classe di servizio come variabile membro e non viene utilizzato in nessun'altra parte del codice oltre a quello mostrato sopra, quindi dove potrebbe essere reimpostato su null?

risposta

15

è necessario impostare il contenutoIntent per la notifica.

nel tuo caso:

notification.contentIntent = notificationIntent; 

altrimenti si otterrà il messaggio, che il contentIntent della notifica è nullo, perché non è impostato.

docu è qui: http://developer.android.com/reference/android/app/Notification.html#contentIntent

Ho un piccolo esempio qui: http://united-coders.com/nico-heid/show-progressbar-in-notification-area-like-google-does-when-downloading-from-android

+5

Non tutte le versioni di Android richiedono questo. Avevo un caso che funzionava bene su tutto tranne il Kindle Fire. –

+4

Sai cosa faccio se non voglio che l'intenzione di sparare clicchi sulla notifica? Voglio solo che sia lì mentre il sistema sta facendo qualcosa e andrà avanti da solo. –

+0

per il mio caso, mostrando notificaBar dal servizio, che sarebbe mBuilder.setContentIntent (PendingIntent.getActivity (this, 0, new Intent(), 0)); – toantran

2

Nel tuo caso

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

se si desidera utilizzare Intenti con la stessa azione ma diversi extra:

1) Modifica

requestCode

dal default "0" in

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

a qualcosa di unico come `

(int) System.currentTimeMillis();

` 2)

notification.contentIntent = notificationIntent;

Entrambi i passaggi sono obbligatori perché:

  • opzione 2 non funziona senza l'opzione 1.
  • Opzione 1 getterà IllegalArgumentException senza 2.
0

Nel mio caso, ho avuto un esempio di codice per fare, con una singola notifica per creare, e mi anche l'errore "contentIntent required" - google mi ha portato a questa discussione: D

la fonte di questo problema erano citazioni che ho copiato da un codice di esempio e incollato nel progetto eclipse. Quando ho cancellato "" e li ho reinseriti e il problema è stato risolto. Forse questo aiuta qualcuno.

Questi erano citazioni fonte di errore: nb.setContentTitle ("! La mia prima notifica"); nb.setContentText ("Hello");

3

penso che questo è perché il sistema operativo Android versione

La versione 2.3 o inferiore , deve impostare contentIntent, in caso contrario, si otterrà questa eccezione.

Nel mio progetto, scrivo in questo modo:

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; }

Forse questo potrebbe aiutare!

Problemi correlati