2012-01-04 11 views
31

Sto cercando di rendere il mio Service in esecuzione in primo piano. Ho provato a utilizzare this example (cercare la sezione "Esecuzione di un servizio in primo piano"), ma in realtà non è possibile visualizzare la mia notifica con startForeground(). E nessuna eccezione viene lanciata. Per renderlo visibile, ho bisogno di usare NotificationManager come here spiegato. Con NotificationManager la mia notifica funziona, ma non sono sicuro che il mio Service sia in primo piano dopo questa chiamata "silenziosa" a startForeground().startForeground() non mostra la mia notifica

Cosa può essere che non va?

EDIT: Ho appena testato this sample project che dovrebbero dimostrare startForeground(), ma non funziona! Io uso API v7.0, l'ho testato sia su emulatore che su dispositivo reale (SE Xperia Neo). La notifica non appare.

EDIT2: se provo a chiamare setForeground() poi ho avuto un avvertimento setForeground: ignoring old API call.

Ho anche provato a utilizzare startForegroundCompat() come descritto here, ma l'effetto è assolutamente lo stesso. Controllo se il mio servizio è in primo piano utilizzando ActivityManager.RunningServiceInfo come descritto here e vedo che il mio servizio è non in primo piano.

+0

Dato che hai scelto di non fornire il codice sorgente, sarà difficile aiutarti direttamente. [Ecco un esempio di progetto] (https://github.com/commonsguy/cw-android/tree/master/Notifications/FakePlayer) che usa 'startForeground()' con successo. – CommonsWare

+0

Non ho fornito il codice sorgente perché il mio codice è esattamente lo stesso che nell'esempio che ho fornito: http://goo.gl/xXIvc. Grazie per il progetto di esempio. –

+0

Ho testato questo progetto di esempio, non funziona! Io uso API v7.0, l'ho testato sia su emulatore che su dispositivo reale (SE Xperia Neo). La notifica non appare. –

risposta

101

Ho appena notato che startForeground() non mostra l'icona di notifica se il parametro è impostato su id0 ...

startForeground(0, notification); // Doesn't work... 

startForeground(1, notification); // Works!!! 

Spero che possa aiutare qualcuno bloccato su questo.

+2

Wow è stata una sorpresa totale. Risolto il problema per me. Grazie! – Yuvi

+7

eppure la documentazione è tristemente vaga su ciò che anche questo valore di identificazione fa ... Sono totalmente frustrato dalla scarsa documentazione (IMO) -_- –

+0

Grande, questo ha risolto il problema! – Dan

0

DMitry. Ho appena sofferto il tuo problema e ho trovato la causa.

Se la tua app sta cambiando stato di un COMPONENT PackageManager.setComponentEnabledSetting()) Android rimuove il servizio da foregraound e la sua icona di notifica.

Bug reported at Nov, 2011

+1

Grazie per la risposta, ma la mia app non modifica lo stato di un COMPONENTE, quindi potrebbe essere un altro motivo. –

16

in aggiunta alla risposta migliore. si dovrebbe anche controllare che hai chiamato setSmallIcon. Sul mio telefono Android, non riesco a ottenere quello che mi aspettavo senza chiamare setSmallIcon

+0

Ha funzionato nel mio caso – kospol

+0

Ha funzionato anche per me – Nikaoto

0

Questo potrebbe essere un vecchio thread, ma mi piacerebbe aggiungere quello che ho appena appreso che non è ancora menzionato:

E 'possibile che un numero Service è ancora attivo dopo che stopSelf() viene chiamato perché ci sono Activity che si sono associati allo Service. In effetti, lo startForeground() non mostrerà la notifica né darà alcuna eccezione in questa circostanza.

0

Il servizio è un servizio avviato o un servizio associato? Ho avuto lo stesso problema con un servizio associato, ma l'avvio del servizio prima dell'associazione mi ha permesso di chiamare startForeground(int, notification) con e di visualizzare la notifica.

Problemi correlati