Sto impostando la modalità "spegni" per la mia app Android quando è in esecuzione su telefoni e tablet recenti. Nel mio metodo onCreate(), ho aggiunto:Mantenimento della modalità "spegni" (View.setSystemUiVisibility) su tutti i riavvii
View rootView = getWindow().getDecorView();
rootView.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); // aka View.SYSTEM_UI_FLAG_LOW_PROFILE
questo funziona meglio di quanto pensassi. Sul mio tablet Android 3.2 la barra di stato si avvia in modalità basso profilo (tutti i pulsanti sulla barra sono sostituiti da punti). Se interagisco con i pulsanti sulla barra diventerà normale, quindi tornerò alla modalità di basso profilo in seguito (ad es., Se controllo la finestra di configurazione/notifiche dalla barra di stato). Quindi sembra che questa sia più una proprietà della mia app che un "comando" per nascondere l'interfaccia utente direttamente.
Ci sono due casi d'angolo che non sono gestiti, però. Innanzitutto, se un utente tocca la barra di stato senza colpire nessuno dei punti, la barra diventa attiva. Non torna mai alla modalità di basso profilo finché l'utente non interagisce effettivamente con qualcosa sulla barra (ad esempio, esamina le notifiche o acquisisce uno screenshot). Quindi, se tornano a interagire con la mia app, la barra di stato non è più in modalità basso profilo. (Anche l'app Gallery ha questo problema, quindi forse non è solo per me.) Il secondo caso angolare è un resume dalla schermata di blocco. Se tocchi il pulsante di accensione per bloccare il tablet, quindi lo sblocco e riprendi l'app, la barra di stato è completamente visibile (e l'interazione con esso non cambia nulla). (L'app Gallery non presenta questo problema.)
Un paio di post sul blog suggeriscono che potrei impostare un gestore per ascoltare le modifiche alla visibilità dell'interfaccia utente del sistema e quindi nascondere l'interfaccia utente se diventa visibile. Come questo:
rootView.setOnSystemUiVisibilityChangeListener(
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if (visibility == View.STATUS_BAR_VISIBLE) {
game.flagUIIsVisible();
}
}
});
Nel mio caso, il metodo sull'oggetto game
imposta solo una bandiera dicendo che l'interfaccia utente è andato invisibile. Successivamente, se nella mia app sono presenti eventi di tocco (sono gestiti dallo stesso oggetto game
) e questo flag è impostato, quindi richiamo di nuovo la chiamata STATUS_BAR_HIDDEN.
Tuttavia, con queste richiamate non c'è alcun impatto visibile sull'interfaccia utente. Posso vedere che il gestore di destra viene chiamato da alcuni messaggi di log, e posso vedere che il listener viene invocato.
Ho anche provato a richiamare la chiamata STATUS_BAR_HIDDEN nel mio percorso onResume
, ma non ha fatto alcuna differenza.
Sto cercando informazioni sul fatto che si tratti di una sorta di bug noto o di suggerimenti su cosa potrebbe fare l'applicazione Galleria (supponendo che faccia qualcosa di diverso). Oppure suggerimenti per altre API da provare (o altri dettagli che potrebbero essere pertinenti).
Sto usando libGDX e la mia app ha solo una vista, quindi è piuttosto semplice. La vista è anche impostata per essere a schermo intero senza titolo di libGDX. Ho ottenuto il mio targetSdkVersion impostato su 15 nel mio manifest.
+1, Questo risolto il mio problema troppo: D – Houssni