Ho implementato un BroadcastReceiver che viene attivato da AlarmManager. AlarmManager è inizializzato su BOOT_COMPLETED. Quindi devo dichiarare il ricevitore nel manifest.Come determinare se una delle mie attività è in primo piano
Il mio problema è che voglio che BroadcastReceiver faccia qualcosa quando nessuna delle mie attività è in primo piano (ovvero l'utente non sta interagendo con la mia applicazione). Estraggo le informazioni da un server remoto e non voglio avvisare l'utente se è attualmente nella mia applicazione comunque.
Finora non sono riuscito a trovare un modo per determinare se la mia applicazione è in primo piano. C'è un modo per fare una cosa del genere? ActivityManager mi dice se la mia applicazione è in esecuzione ma non se è in primo piano.
Il problema è praticamente la stessa di quella descritta qui: Inform Activity from a BroadcastReceiver ONLY if it is in the foreground
SOLUZIONE:
Dopo aver valutato diverse soluzioni voglio delineare rapidamente quello che penso sia il metodo migliore per affrontare le attività nel sfondo/primo piano.
Il modo migliore è registrare un ricevitore di trasmissione nel metodo onResume della propria attività e cancellarlo dalle attività su onPause. Qualsiasi servizio o altro elemento di sfondo sarà necessario inviare un intent broadcast con un'azione specifica che intercetterà l'attività dell'utente.
Se la tua attività è in primo piano avrà il suo destinatario registrato registrato ed è in grado di gestire direttamente l'invio di intento dal tuo servizio. Se non è in primo piano, non riceverà l'intento, ma il servizio che ha invocato la trasmissione saprà che nessuno ha intercettato il suo intento di trasmissione e sarà in grado di gestirlo da solo. Ad esempio, si potrebbe di avviare l'attività desiderata, mostrare una notifica ecc
"il servizio che ha invocato la trasmissione saprà che nessuno stato intercettato il suo intento broadcast" - forse una domanda stupida, ma come farà a saperlo? – ostergaard
@ajostergaard Penso che vada così: Broadcast inviato "sei in foregraund" intento. Quando Activity è in primo piano, può ricevere quell'intenzione (poiché registra il proprio recevier in onResume) e rispetta con Intent "sì, sono in primo piano". Broadcast può revevie che, quindi conoscere lo stato di attività. BTW. Controlla la mia risposta per questa domanda di seguito :) – mklimek