2012-09-20 12 views
6

Ho una notifica del servizio in primo piano che quando si fa clic su deve avviare un'attività. Questa attività è molto breve prima di chiamare finish().Notifica in sospesoIntent contentIntent ha esito negativo quando termina la chiamata di attività()

La prima volta che la notifica viene cliccato funziona, la seconda volta e, successivamente, ottengo l'errore:

Sending contentIntent failed: android.app.PendingIntent$CanceledException 

Nel mio codice durante la creazione della notifica del servizio di primo piano, ho cambiato il randomActivity.class a un'altra classe di attività che non chiama finitura e funziona perfettamente ad ogni clic. Da:

Intent notificationIntent = new Intent(this, RandomActivity.class); 

a:

Intent notificationIntent = new Intent(this, HomeActivity.class); 

funziona bene ...

Ho usato il codice di notifica standard dal sito Android Developers, così come testarlo utilizzando costruttore di notifica. Ottengo lo stesso risultato a prescindere. Funziona perfettamente a meno che l'attività non termini finish();

È questo comportamento previsto, un bug o mi manca qualcosa?

Vi ringrazio in anticipo per il vostro aiuto e, auspicabilmente, una soluzione!

Nota: il codice di notifica che uso è completamente standard, quindi non l'ho pubblicato. RandomActivity chiama finish(); su onCreate, quindi non c'è niente di strano da vedere neanche lì.

risposta

9

Dopo aver provato tutto ciò che potevo, alla fine ho trovato una soluzione. Pubblicazione nel caso in cui qualcuno si imbatta anche in questo problema.

Ho dovuto associare l'int requestCode all'ID di notifica. Perché? Assolutamente nessuna idea ... posso solo supporre che impedisca che i dati di intenti diventino nulli o riusarli?

private static int ONGOING_NOTIFICATION_ID = 76; 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Lo stesso che l'id di notifica a startForeground:

this.startForeground(ONGOING_NOTIFICATION_ID, not); 

Spero che questo aiuti qualcuno.

+0

Sono d'accordo con @brandall. Se si utilizzano i pulsanti di azione, l'ID notifica deve comunque utilizzare il codice di richiesta da contentIntent e non da alcuno degli intenti di azione. – fahmad6

2

Non ho bisogno di controllare l'id di notifica (come suggerito), ma ho dovuto cambiare il flag a FLAG_UPDATE_CURRENT, anziché a FLAG_ONE_SHOT.

Con FLAG_ONE_SHOT, l'intento in sospeso viene annullato una volta recapitato e, successivamente, nessun importo di intercettazione della notifica consentirà la consegna dello stesso intento in sospeso, quindi l'eccezione.

Questo era il problema per me.

Problemi correlati