¿Hay una manera de ocultar la barra del sistema en Android 3.0? Es un dispositivo interno y estoy gestionando la navegación

En Android 2.3 o posterior, puedes hacer una aplicación a pantalla completa y luego "secuestrar" los botones de menú / atrás / búsqueda simplemente devolviendo false onKeyDown () … y registrar la aplicación como una aplicación predeterminada de inicio de inicio, No hay forma de salir de la aplicación.

En Android 3.0 (Honeycomb) los botones de navegación (barra de sistema) siempre está presente, me gustaría ocultarlo. ¿Es posible?

FYI, no publico esta aplicación en el Android Market. Esta es una aplicación interna para dispositivos que van a ser utilizados en el interior, necesito asegurar el dispositivo.

No se puede ocultar la barra del sistema en Android 3.0.

Puesto que esto no es posible hacer usando una API pública, he encontrado una manera de hacerlo de una manera muy "hack-ish" que requiere un dispositivo enraizado.

Actualización: como user864555 señaló a continuación, esta es otra solución

$ adb remount $ adb shell mv /system/app/SystemUI.odex /system/app/SystemUI.odexold $ adb shell mv /system/app/SystemUI.apk /system/app/SystemUI.apkold $ adb reboot 

"Ese código desactiva la aplicación SystemUI que es la barra de menús en realidad, que también se ganará el espacio de esa barra del sistema, pero asegúrese de tener un botón de retroceso o algo para salir".

Eso funciona muy bien también. Por favor vote por su respuesta. Voy a tratar de mantener este actualizado tanto como pueda.


Actualización: Aquí hay un tercer método. Una forma de hacerlo mediante programación o mediante la línea de comandos. Encontrado aquí: http://android.serverbox.ch/?p=306

Este método requiere acceso root, pero no es necesario cambiar la densidad de la pantalla LCD, manteniéndose igual que el original, y puede obtener la barra de navegación de la interfaz de usuario de nuevo muy rápido y fácil sin tener que reiniciar cada vez.

La publicación del blog también muestra cómo implementarla en tu aplicación de Android, recuerda que requiere root y puede que no sea una buena idea hacerlo a menos que la aplicación se ejecute en un quiosco o en tu propio dispositivo. Por favor, no implementes este método en Una aplicación que se publica en el mercado de Android o en cualquier sitio público.

Para detener / eliminar / deshabilitar la barra del sistema (necesita ser su antes de emitir este comando):

 $ service call activity 79 s16 com.android.systemui 

Para restaurar la barra del sistema simplemente emita este comando:

 $ am startservice -n com.android.systemui/.SystemUIService 

Es fácil. Ojalá ICS sea lanzado pronto junto con el código fuente para que cualquiera pueda construir Android para nuestras tablets Kiosk.

Si tienes acceso al archivo del sistema, puedes hacerlo (el mío está desbloqueado y enraizado, así que no estoy seguro de lo que necesitas, no lo he probado con un xoom fresco de fábrica):

 adb shell cd /system/app/ mv SystemUI.odex SystemUI.odexold mv SystemUI.apk SystemUI.apkold exit adb reboot 

Ese código deshabilita la aplicación SystemUI que es en realidad la barra de menús. Con esa modificación, también obtendrá el espacio de esa barra del sistema, pero asegúrese de que tiene un botón de retroceso o algo para salir en su aplicación.

Editar:

Si tiene problemas con el archivo de sólo lectura, necesita mint para montar el directorio /system como lectura-escritura. Para ello, utilice este comando en adb shell (Fuente: http://forum.xda-developers.com/showthread.php?t=1159495&page=5 )

 mount -o remount,rw /dev/block/stl6 /system 

Puede volver a montarlo como de sólo lectura mediante el comando:

 mount -o remount,ro /dev/block/stl6 /system 

Editar:

Estos métodos permiten que el teclado virtual se muestre normalmente cuando sea necesario.

Aquí está el código relacionado con mi respuesta anterior. Ocultará automáticamente la barra de estado y volverá a mostrarla cuando finalice. Importante: para volver a mostrarlo, el código tiene que reiniciar system_server, lo que lleva algún tiempo para arrancar de nuevo y durante ese tiempo, verá la animación de arranque en panal. Eso es lo único que encuentro por ahora para mostrar la barra de estado de nuevo. Reiniciar SystemUI no es suficiente. Y debido a eso, apagará su aplicación cuando reinicie system_server.

Este código necesita un sistema operativo root con superusuario instalado.

 package com.projects; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.PrintStream; import android.app.Activity; import android.app.AlertDialog; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TableLayout.LayoutParams; // http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/ public class FullScreenTestActivity extends Activity implements Button.OnClickListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { Process p; p = Runtime.getRuntime().exec("su"); // Attempt to write a file to a root-only DataOutputStream os = new DataOutputStream(p.getOutputStream()); os.writeBytes("mount -o remount,rw /dev/block/stl6 /system\n"); os.writeBytes("mv /system/app/SystemUI.odex /system/app/SystemUI_Old.odex\n"); os.writeBytes("mv /system/app/SystemUI.apk /system/app/SystemUI_Old.apk\n"); os.writeBytes("mount -o remount,ro /dev/block/stl6 /system\n"); // Close the terminal os.writeBytes("exit\n"); os.flush(); p.waitFor(); new AlertDialog.Builder(this) .setIconAttribute(android.R.attr.alertDialogIcon) .setMessage("Android Honeycomb StatusBar removed successfully!") .show(); // Set action for exiting. Button cmdExit = new Button(this); cmdExit.setText("Exit"); cmdExit.setOnClickListener(this); this.addContentView(cmdExit, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); } catch (Exception e) { ShowErrorGlobal(e); } } public void onClick(View v) { try { Process p; p = Runtime.getRuntime().exec("su"); // Attempt to write a file to a root-only DataOutputStream os = new DataOutputStream(p.getOutputStream()); os.writeBytes("mount -o remount,rw /dev/block/stl6 /system\n"); os.writeBytes("mv /system/app/SystemUI_Old.odex /system/app/SystemUI.odex\n"); os.writeBytes("mv /system/app/SystemUI_Old.apk /system/app/SystemUI.apk\n"); os.writeBytes("mount -o remount,ro /dev/block/stl6 /system\n"); String systemServerPID = GetSystemServerPID(); if (systemServerPID != null) os.writeBytes("kill " + systemServerPID + "\n"); // else ... manual reboot is required if systemServerPID fail. // Close the terminal os.writeBytes("exit\n"); os.flush(); p.waitFor(); } catch (Exception e) { ShowErrorGlobal(e); } } public String GetSystemServerPID() { try { Process p = Runtime.getRuntime().exec("ps -n system_server"); p.waitFor(); BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); reader.readLine(); // Skip header. return reader.readLine().substring(10, 16).trim(); } catch (Exception e) { return null; } } protected void ShowErrorGlobal(Exception e) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream stream = new PrintStream( baos ); e.printStackTrace(stream); stream.flush(); new AlertDialog.Builder(this) .setIconAttribute(android.R.attr.alertDialogIcon) .setTitle("Epic fail") .setMessage("Error: " + new String( baos.toByteArray() )) .show(); } } 

Aunque esto no responde a la pregunta de "bloquear" la pantalla, puede ocultar la barra de estado sin ser root utilizando la API setSystemUiVisibillity (API nivel 11).

Algunos pseudocódigo:

 public MyActivity extends Activity { @Override public void onCreate(Bundle savedInstance) { //... final View mainView = findViewById(R.id.you_main_view_id); mainView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); //Register a listener for when the status bar is shown/hidden: final Context context = getApplicationContext(); mainView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener () { @Override public void onSystemUiVisibilityChange(int visibility) { if ((visibility == View.SYSTEM_UI_FLAG_VISIBLE)) { //Do stuff here...pause the video/game? } else { //Do other stuff here..resume the video/game? } } }); } } 

Esto oculta la barra de estado hasta que el usuario haga clic en el borde inferior de la pantalla, en cuyo caso se mostrará la barra de estado (se volverá a ocultar después de unos segundos).

Asegúrese de haber especificado targetSdkVersion = "11" o superior en su manifiesto.

La aplicación HideBar se puede utilizar para ocultar la barra del sistema en las tabletas android (HC, ICS, JB). Contiene un modo de quiosco opcional que se puede utilizar para bloquear las tabletas completamente y también otras opciones como un botón de atrás oculto. Es un software GPL. Póngase en contacto con el desarrollador (ver correo electrónico en el sitio web de aplicaciones) si esta aplicación tiene que instalarse en volúmenes grandes.

Para otros que han tenido este problema:

Si no ha configurado correctamente el android: targetSdkVersion en su archivo AndroidManaifest.xml, setSystemUiVisibility no tiene ningún efecto (a diferencia de otras API avanzadas que funcionan si la variable targetSDKVersion se ha establecido correctamente o no).

Había abandonado accidentalmente mi targetSdkVersion en 8. Bumping hasta 16 inmediatamente causó setSystemUIVisiblity para tener el efecto deseado.

, es posible hacerlo si tiene acceso root en el dispositivo.

Este código puede ocultar y mostrar el StatusBar matando su proceso y llamándolo de nuevo.

 package com.example.statusbar; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; public class MainActivity extends Activity { String commandToExecute; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); commandToExecute = "/system/xbin/su"; executeShellCommand(commandToExecute); Button btHideStatusBar = (Button) findViewById(R.id.buttonHide); Button btShowStatusBar = (Button) findViewById(R.id.buttonShow); btHideStatusBar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { commandToExecute = "/system/xbin/su -c /system/bin/service call activity 42 s16 com.android.systemui"; executeShellCommand(commandToExecute); } }); btShowStatusBar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { commandToExecute = "/system/xbin/su -c /system/bin/am startservice -n com.android.systemui/.SystemUIService"; executeShellCommand(commandToExecute); } }); } private boolean executeShellCommand(String command) { try { Runtime.getRuntime().exec(command); return true; } catch (Exception e) { return false; } } } 

A partir de 4.4 puedes hacer esto (esta pregunta es muy antigua, pero siempre aparece en este tema):

SetSystemUiVisibility (View.SYSTEM_UI_FLAG_IMMERSIVE)

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

Si desea ocultar la barra de navegación a través de la aplicación, a continuación, aquí es la forma más sencilla. Sólo escriba este código en su etiqueta de aplicación en el archivo de manifiesto

 > <Application > android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" <!-- > other parameters of application tag--> > > 

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

o

MainView.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE)

No, la barra de tareas sigue ahí, con tres puntos grises en lugar de iconos clásicos

  • MapView en un fragmento (Honeycomb)
  • ¿Cómo encontrar Fragmento que fue cambiado dinámicamente?
  • Uso de `onPrepareOptionsMenu ()` en Android 3.0+
  • Error al agregar fragmentos dinámicamente -java.lang.IllegalStateException:
  • Cargadores de Android, el camino a seguir?
  • ¿Sólo una aplicación en una pestaña de galaxias?
  • Tamaño de pantalla Honeycomb Menu android
  • HttpClient ejecución de HttpPost significativamente más lento en Android 3.2 que 2.3.3
  • Emulador SDK de Android con resolución Full HD
  • Convertir flujo de entrada en mapa de bits
  • Iniciar actividad de los encabezados de preferencia
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.