2012-10-02 16 views
6

In genere, chiamate Android sul Activity quando inizia a essere oscurato o nascosto, seguito da onStop quando non viene più visualizzato. Nel mio gioco, sospendo il gioco in , quindi l'utente non perde il gioco mentre guarda altrove.Come dire che l'attività è stata coperta dall'area di notifica?

Tuttavia, quando l'utente trascina verso il basso la barra di notifica, copre il mio Activity, ma non viene chiamato né né onStop. Questo non sembra essere menzionato nella documentazione. Il gioco scorre via in background senza che nessuno lo guardi. C'è un altro modo per dire che il mio Activity è stato oscurato quando questo accade, quindi posso mettere in pausa il gioco prima che l'utente perda? Non riesco a trovare nulla su questo sul sito degli sviluppatori Android.

risposta

3

Poiché lo StatusBarManager non fa parte dell'API ufficiale, trovo improbabile che esista un modo per rilevarlo. Anche usando il reflection, nessuna delle classi di statusbar sembra avere un gancio per gli ascoltatori.

Se è possibile, è possibile deactivate the statusbar. In caso contrario, penso che tu sia fuori di fortuna :(

+0

Non importa. 'onWindowFocusChanged' viene attivato nell'attività quando la notifica viene interrotta. –

8

La onWindowFocusChanged(boolean hasFocus) di Activity dovrebbe servire allo scopo desiderato. Si chiama con false quando l'area di notifica viene trascinato verso il basso, e con true una volta che l'area viene trascinato back up. Il corrispondente Android documentation afferma che questo metodo "è il migliore indicatore del fatto che questa attività è visibile all'utente". si precisa inoltre espressamente che la richiamata viene attivato quando viene mostrato il "pannello notifica barra di stato" .

È importante notare che questo metodo viene anche chiamato in altre situazioni: un buon esempio è il display di un AlertDialog. onWindowFocusChanged viene anche chiamato quando l'attività stessa mostra un AlertDialog. Ciò potrebbe richiedere una considerazione, a seconda se il gioco utilizza AlertDialogs o qualcos'altro che causa un cambiamento di messa a fuoco.

In uno scenario simile a quello descritto in questa domanda, abbiamo utilizzato con successo il metodo onWindowFocesChanged, ad es. su un Nexus 5 con Android 4.4 o un Sony Xperia Tablet con Android 4.1.

Problemi correlati