2012-05-04 30 views
10

Fornirò ai miei tablet ICS gli utenti per completare un sondaggio, quindi vorrei che l'utente lavorasse solo con la mia app. Non dovrebbero essere in grado di passare alla schermata iniziale, premere i pulsanti indietro, ecc., Quindi mi piacerebbe nascondere completamente la barra di sistema.Un modo semplice per nascondere la barra di sistema su Android ICS

Il mio tablet è root e so che un'applicazione come this può aiutarmi, ma non ho bisogno di tutte le funzioni extra di questa app.

Ho trovato this tutorial che potrebbe aiutarmi, ma se posso aggiungere il codice per fare da solo, sarebbe fantastico.

risposta

8

HideBar ha una modalità chiosco appositamente per questo caso d'uso.

Un download gratuito è disponibile a http://ppareit.github.com/HideBar/. Puoi anche trovarlo sul mercato allo https://play.google.com/store/apps/details?id=be.ppareit.hidebar.

Se si desidera incorporarlo nella propria applicazione di test/sondaggio, è sempre possibile contattare lo sviluppatore (vedere i collegamenti per un'email). Il codice potrebbe essere spiegato o un Intent per nascondere il nascondiglio.

+0

Questa è un'ottima app. Anche se ho finito l'app sondaggio, ma posso usare nuovamente questa app nel prossimo futuro. https://github.com/ppareit/HideBar/blob/master/src/be/ppareit/hidebar/Device.java –

+0

Questo post ha salvato la mia giornata –

6

controllare questo link: (requires root) http://android.serverbox.ch/?p=306

domanda simile è stato postato anche qui: Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation

o provare HideBar http://ppareit.github.com/HideBar/

In realtà si può semplicemente mettere la barra di sistema " si spegne "in modalità, i pulsanti della barra di sistema e le notifiche si attenuano.

View v = findViewById(R.id.view_id); 
v.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
+0

grazie per la risposta. Le soluzioni nei tuoi tre collegamenti sono valide solo per Android 3.0. Il dispositivo è mio e l'ho radicato. –

+1

se l'utente tocca lo schermo, la barra di sistema si accenderà di nuovo :) –

3

Google intende Android per essere utilizzato solo per i consumatori. Hanno integrato la barra dell'interfaccia utente del sistema più strettamente in Android ICS (4.0) per impedire alle persone di effettuare il rooting del dispositivo e uccidere la barra in questo modo. Il tentativo di eliminare il processo della barra di sistema impedirà l'avvio completo del sistema operativo.

Se si desidera impedire agli utenti di accedere alla schermata iniziale, non si è fortunati con Android ICS. Suggerirei di trovare un produttore di tablet che precarichi il dispositivo con Android 2.3. O quello, o usa un dispositivo Android 3.x rootato.

Se si intende utilizzare Android per chiosco o dispositivi bloccati, sarebbe meglio scegliere come target un sistema operativo un po 'più aperto.

+0

grazie per aver risposto. Ho lasciato questo problema poiché mi ci vuole tempo. L'utente https://play.google.com/store/apps/details?id=com.goodmooddroid.gesturecontroldemo è abbastanza buono per me :) –

4

Desidero aggiungere alcune informazioni alle risposte esistenti sperando che sia utile per qualcuno.

Per ottenere un vero e proprio schermo intero a lavorare su My Low Cost Cina compresse ho bisogno di modificare un file che si trova in

system/build.prop 

sostituire il testo

ro.property.tabletUI=true 

con

#ro.property.tabletUI=true 

(commento la linea).Dopo di che, posso ottenere un pieno schermo utilizzando

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 

per ogni attività nel minfest.xml

Questa soluzione è buona solo se si vende tablet con l'applicazione e ha bisogno di privilegi di root per modificare ilsystem/build.prop. Quindi non è una soluzione per tutti, quindi per favore non downvotare questo piccolo contributo.

MODIFICA: Ho notato che i miei tablet hanno pulsanti hardware (Home, menù e retro) sui frame. Quindi Android mi consente di nascondere la barra di sistema. Ho provato con altri tablet che non hanno i pulsanti hardware senza successo.

+0

Ho provato il tuo metodo e ottengo un "Sfortunatamente, l'interfaccia utente del sistema è stata interrotta. " avviso all'avvio. la barra di sistema viene rimossa dopo questo, ma è comunque in grado di evitare che questo errore si verifichi? – richmb

+0

@richmb Questo errore dice che non è possibile utilizzare questa soluzione per la build Android del proprio dispositivo senza toccare qualcos'altro, mi spiace. –

0

C'è una soluzione alternativa per disabilitare la barra dei menu (non nascondi) in tutti i tablet senza root. Ma questo è un po 'complicato, ma funziona pulito. Diverse app conosciute sul mercato al momento utilizzano questa strategia per ottenere questa funzione di barra dei menu di disattivazione per le loro app.

  • Concessione privilegio di amministratore (è necessario un coinvolgimento utente temporaneo per l'attivazione).
  • Imposta password & blocca il dispositivo utilizzando api il profilo amministratore del dispositivo a livello di codice.
  • Quindi caricare sempre le interfacce utente nella parte superiore della schermata di blocco nativa. (Ovviamente questo mostrerà lo schermo di blocco dello sfondo ogni volta che avviene una transizione tra le attività, ma se la logica è organizzata bene, allora sarà liscia meno notata dall'utente)
  • Quando è necessario abilitare indietro, reimpostare la password su "" usando resetPassword ("", 0) dell'oggetto Device Manager del dispositivo.
11

Dopo un sacco di ricerca su internet, sono riuscito ad ottenere la barra di sistema per nascondere e appaiono in un dispositivo 4.2 utilizzando:

da nascondere:

Runtime.getRuntime().exec("service call activity 42 s16 com.android.systemui"); 

Oppure utilizzare 79, invece di 42 per API inferiore a 14. Potrebbe anche essere necessario includere l'autorizzazione SET_DEBUG_APP, nel qual caso è necessario che l'applicazione sia firmata con la chiave di sistema o installata nella directory/system/app /.

per mostrare:

Runtime.getRuntime().exec("am startservice --user 0 -n com.android.systemui/.SystemUIService"); 

In alternativa alcune persone hanno utilizzato l'opzione -a (-n invece di), anche se questo stava causando un errore sul mio dispositivo:

Errore: Non trovato; nessun servizio avviato.

Per Android 4.4, è disponibile una nuova funzionalità chiamata modalità immersiva che nasconde sia il sistema che le barre di stato. L'interfaccia utente del sistema viene attivata dall'utente tramite l'uso di uno sfioramento dal bordo superiore o inferiore dello schermo.Per maggiori dettagli dare un'occhiata a:

http://developer.android.com/reference/android/view/View.html#setSystemUiVisibility(int)

Using new IMMERSIVE mode in android kitkat

Ad esempio:

getWindow().getDecorView().setSystemUiVisibility(
      View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
     | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
     | View.SYSTEM_UI_FLAG_FULLSCREEN 
     | View.SYSTEM_UI_FLAG_IMMERSIVE) 
+0

Hai trovato come farlo su KitKat?Funzionava perfettamente per i dispositivi testati prima di kitkat – DArkO

+0

@DArkO Puoi utilizzare la nuova modalità immersiva disponibile in 4.4. In caso contrario potrebbe essere necessario trovare il nuovo ID di servizio per l'interfaccia utente del sistema (42 in 4.2 e 4.3). – TheIT

+0

Sì, ho pensato che potresti averlo visto che probabilmente usi questo codice. qualche idea su come ottenere il servizio id? Non posso usare la modalità immersiva perché ho bisogno di un chiosco senza mostrare mai le barre. strisciare per mostrare loro non funziona per me, se c'è un modo per proteggere con password che potrebbe funzionare anche se finora non sono stato in grado di trovare nulla. grazie per l'assistenza – DArkO

0

Per completare le risposte già date, e nel caso in cui è utile per chi ha bisogno di un simile comportamento, c'è questo tutorial per dispositivi Android 4.0 e versioni successive, ti dice come nascondere la barra di navigazione e la barra di stato (che riappariranno quando lo schermo viene toccato di nuovo):

https://developer.android.com/training/system-ui/navigation.html

mi rendo conto che non è quello che ti serve esattamente, ma potrebbe essere utile per qualcun altro guardare a questo problema.

2

ho trovato una soluzione che, nel mio caso d'uso, funziona come un fascino nascondendo la barra dei menu anche su un dispositivo NON ROOTED:

attivazione di questo flag

layoutparams.flags = 0x80000000 | layoutparams.flags; 

ai parametri di layout di mia finestra fa semplicemente il trucco!

Ecco il frammento di completo che ho usato:

Window window = getWindow(); 
    android.view.WindowManager.LayoutParams layoutparams = window.getAttributes(); 
    layoutparams.flags = 0x80000000 | layoutparams.flags; 
    window.setAttributes(layoutparams); 

nella mia attività onCreate.

Per scoprire questo ho invertito l'ingegnerizzazione di un Apk non di sistema che ho trovato in qualche modo in grado di farlo.

Secondo la documentazione ufficiale:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

che "0x80000000" è il FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS introdotte come una costante del sistema di livello di API 21, e indica in sostanza che "questa finestra è responsabile per disegnare lo sfondo per le barre di sistema. " e poiché non sto disegnando manualmente alcuna barra di sistema, non viene mostrata alcuna barra dei menu.

Ho testato questo solo su un paio di Moverio BT-200 con Android ICS 4.0.3 perché questo è il dispositivo al momento sto lavorando e anche perché in questo momento non ho altri dispositivi che eseguono livelli API prima 19 sotto le mie mani per testarlo.