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(); }
Aggiungi un commento