2010-06-24 5 views
18

Ich habe einen Dienst ausgeführt, der eine Benachrichtigung in der Benachrichtigungsleiste aktualisiert, wenn er eine Nachricht erhält, die besagt, dass er geändert werden muss.Android - java.lang.IllegalArgumentException: contentIntent erforderlich Fehler durch Benachrichtigung verursacht?

Allerdings bekomme ich folgende Fehler manchmal, wenn die Benachrichtigung aktualisiert werden

ist
java.lang.IllegalArgumentException: contentIntent required 

Hier ist mein Code:

Variable Setup


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

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

NotificationManager mNotificationManager; 

NotificationManager Schaffung


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

Mitteilung Creation


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

Update der Mitteilung


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

So etwas meinen contentIntent irgendwo entlang der Strecke passiert, wäre das richtig sein?

Es wird am Anfang meiner Service-Klasse als Member-Variable deklariert und wird nicht anderswo im Code verwendet als oben gezeigt, also wo könnte es auf Null zurückgesetzt werden?

Antwort

15

Sie müssen den contentIntent für Ihre Benachrichtigung festlegen.

in Ihrem Fall:

notification.contentIntent = notificationIntent; 

sonst wird die Meldung, dass der contentIntent der Mitteilung null ist, weil er nicht gesetzt ist.die Doku

ist hier: http://developer.android.com/reference/android/app/Notification.html#contentIntent

ich hier ein kleines Beispiel haben: http://united-coders.com/nico-heid/show-progressbar-in-notification-area-like-google-does-when-downloading-from-android

+5

Nicht alle Versionen von Android erfordern dies. Ich hatte einen Fall, der mit allem außer dem Kindle Fire gut funktionierte. –

+4

Wissen Sie, was ich mache, wenn ich beim Klicken auf die Benachrichtigung keine Absicht haben möchte? Ich will nur, dass es da ist, während das System etwas macht und es selbständig wird. –

+0

für meinen Fall, zeigt notificationBar von Service, das wäre mBuilder.setContentIntent (PendingIntent.getActivity (this, 0, neue Intent(), 0)); – toantran

2

In Ihrem Fall

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

wenn Sie Intents verwenden, um mit der gleichen Aktion, aber verschiedene Extras wollen:

1) Änderung

requestCode

von default "0" in

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

zu etwas Einmaliges wie `

(int) System.currentTimeMillis();

` 2)

notification.contentIntent = notificationIntent;

Beide Schritte sind obligatorisch, weil:

  • Option 2 wird ohne Option 1.
  • Option 1 wird werfen Illegal ohne 2.
0

In meinem Fall hatte ich ein Beispiel-Code zu tun, mit einer einzigen Mitteilung zu erstellen, und ich nicht arbeiten hat auch "contentIntent erforderlich" Fehler - google brachte mich zu diesem Thema: D

die Quelle dieses Problems waren Zitate, die ich aus einem Beispielcode kopiert und in Eclipse-Projekt eingefügt. Als ich gelöscht habe "" und tippte sie zurück und das Problem wurde gelöst. Vielleicht hilft das jemandem.

Dies waren Zitate Fehlerquelle: nb.setContentTitle ("Meine erste Benachrichtigung!"); nb.setContentText ("Hallo");

3

Ich denke, das liegt daran, dass das Android OS Version

Die Version 2.3 oder niedriger setzen müssen contentIntent, wenn nicht, werden Sie diese Ausnahme erhalten.

In meinem Projekt, ich schreibe so:

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

Vielleicht könnte Ihnen helfen!

Verwandte Themen