Disabilitare la visualizzazione della statusbar in una app Android

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.

Ad esempio è possibile, nell'onCreate dell'Activity, chiamare il comando sopra su una qualunque delle view.
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.