2012-07-17 13 views
7

Ho un servizio che raschia un sito Web per i dati, quindi se necessario dà all'utente una notifica.Le notifiche scompaiono non appena il servizio termina

Il problema che sto avendo è che le notifiche scompaiono non appena il servizio si chiude (che potrebbe essere istantaneamente). Il codice seguente è tutto il codice di notifica che l'app ha. Non ho inserito alcun codice per cancellare le notifiche.

Se fa alcuna differenza (piuttosto sicuro che non lo sia) sto usando il contesto dell'applicazione qui.

I miei servizi vengono avviati periodicamente, elabora un sito Web, notifica se necessario e quindi si chiude.

Alla fine del mio servizio invece di chiamare stopSelf(), ho dormito per circa 30 secondi e poi ho chiamato stopSelf(). Quindi la notifica rimane per 30 secondi e quindi scompare. Nulla di rilevante appare nel logcat nel momento in cui le notifiche scompaiono.

Sono stato in grado di testare solo utilizzando ICS finora.

+0

Questo dovrebbe andare bene. Generalmente le notifiche spariscono solo se la tua domanda viene uccisa con la forza. Mi aspetterei che qualcosa stia andando in crash. Sarebbe interessante vedere quale codice stai usando per "dormire" (stai effettivamente dicendo al thread di dormire?) E su quale thread è in esecuzione. Sarebbe anche interessante cercare di rimuovere il sonno degli anni '30 a scopo di sperimentazione e vedere se succede lo stesso comportamento. – kabuko

+0

Dov'è il codice che annulla le notifiche se ne hai? Inoltre, non dovresti usare stringhe dirette come android.intent.action. * Perché questo è un COSTANTE disponibile nella classe Intent. @ user1531605 – JoxTraex

+0

Se viene richiesto di interrompere il servizio "appena prima", viene inviata una notifica, ad esempio sulla stessa catena di esecuzione del codice, la notifica viene cancellata. –

risposta

2

Sembra che tu abbia dimenticato prima il manuale dello sviluppatore. Vedi qui http://developer.android.com/guide/topics/ui/notifiers/notifications.html e cerca i flag FLAG_ONGOING_EVENT e FLAG_NO_CLEAR.

Sono stato in grado di testare solo utilizzando ICS finora.

Ecco perché i simulatori sono abbastanza utili. Provalo. Fa parte dell'SDK.

+0

L'ho letto, quelli non sono quello che voglio. Le notifiche dovrebbero essere in grado di essere cancellate dal pulsante "Cancella notifiche", quindi FLAG_NO_CLEAR non sarà di aiuto. E questo non è un evento in corso. Dai documenti "Non dovrebbe essere impostato se questa notifica è in riferimento a qualcosa che è accaduto in un determinato momento, come una telefonata persa.". Questo è esattamente ciò che è, un riferimento a qualcosa che è accaduto in un particolare momento. Anche se come sidenote, ho fatto delle prove con quelle bandiere solo nel caso avessi gli stessi risultati. Le notifiche sparivano ancora quando il servizio si chiudeva. – user1531605

+0

Hai controllato il tuo codice su androidi pre 4.x ?. L'emulatore è sufficiente –

+0

Pubblica il codice sorgente del tuo servizio, solo quelli rilevanti, come la creazione e la distruzione. – JoxTraex

4

Il codice che hai pubblicato funziona. L'ho provato sia da un'attività che da un servizio su jb, e la notifica rimane quando i componenti vengono fermati. Ho anche verificato che potrei uccidere il processo e la notifica rimane. Prova a rimuovere l'app e vedere se il problema persiste. Verificare in particolare che non si chiami annullamento sulla notifica per errore.

1

Si prega di provare il vecchio modo sullo stesso dispositivo e dirci se si comporta allo stesso modo:

private static void CreateNotificationCompat(int notificationID, String link, String title, String text, Context ctx) { 
    String ns = Context.NOTIFICATION_SERVICE; 
    NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(ns); 
    Notification notification = new Notification(R.drawable.notify_icon, title, System.currentTimeMillis()); 
    notification.flags = Notification.FLAG_AUTO_CANCEL; 
    PendingIntent contentIntent; 
    Bundle bundle = new Bundle(); 
    Intent notificationIntent = new Intent("android.intent.action.VIEW", Uri.parse(link)); 
    contentIntent = PendingIntent.getActivity(ctx, notificationID, 
       notificationIntent, 0); 
    notification.setLatestEventInfo(ctx, title, text, 
      contentIntent); 
    mNotificationManager.notify(notificationID, notification); 
} 
Problemi correlati