Disabilitare la visualizzazione della statusbar in una app Android
Inserito Gio,
Premessa: Android 3 per tablet mostra una statusbar (o "bottombar") contenente i tasti di sistema (a differenza delle versioni precedenti dove quella barra era "hardware"). Questa barra non può essere eliminata con comandi "normali".
Non ha tutti i torti Google a imporre questa limitazione: in caso contrario sarebbe possibile per dei malware cammuffare una propria barra da barra di sistema. Essendo tale barra vitale per Android, ciò è male.
Nonostante questo potrebbe essere necessario per applicazioni particolari nasconderla comunque.
L'unica cosa che si può fare tramite API è nasconderla parzialmente.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findViewById(R.id.button0).setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
}E' possibile eliminare completamente la barra solo se nel dispositivo si hanno privilegi di ROOT.
Come root è possibile terminare dei servizi, e la barra in basso è gestita dal servizio di sistema "SystemUI". Quindi, chiudendo quel servizio si toglie la barra.
Si può testare il sistema anche manualmente via interfaccia, andando in gestione processi e terminando il processo in oggetto.
Quindi, per via programmatica, "basta" terminare il servizio quando si vuole nascondere la barra, e riavviarlo quando si vuole mostrare o quando si esce dall'app (altrimenti poi la barra non c'e' più neanche fuori e ci tocca resettare il dispositivo!).
Ecco come fare:
boolean rootMode = true;
public void disableBottombar() {
if (rootMode) {
Process proc;
try {
proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 79 s16 com.android.systemui"});
proc.waitFor();
} catch (IOException e) {
log("FAILED disableBottome" + e.getMessage());
} catch (InterruptedException e) {
log("FAILED disableBottome" + e.getMessage());
}
}
}
public void enableBottombar() {
if (rootMode) {
Process proc;
try {
proc = Runtime.getRuntime().exec(new String[]{"am","startservice","-n","com.android.systemui/.SystemUIService"});
proc.waitFor();
} catch (IOException e) {
log("FAILED disableBottome" + e.getMessage());
} catch (InterruptedException e) {
log("FAILED disableBottome" + e.getMessage());
}
}
}Nel codice basta chiamare "enableBottombar()" per visualizzarla, "disableBottombar()" per toglierla.
Per disabilitarla all'avvio dell'applicazione, e riabilitarla ogni volta che l'app viene messa in background, fare cosi':
@Override
protected void onResume() {
super.onResume();
disableBottombar();
}
@Override
protected void onPause() {
enableBottombar();
super.onPause();
}
@Override
protected void onDestroy() {
enableBottombar();
}
Commenti
Non ci sono ancora commenti.
Lascia un commento
Il tuo indirizzo email non sarà pubblicato. I commenti vengono pubblicati dopo la moderazione.