samsung - ocultar botones virtuales android
¿Hay alguna manera de ocultar la barra del sistema en Android 3.0? Es un dispositivo interno y manejo la navegación (11)
En Android 2.3 y versiones posteriores, puedes crear una aplicación a pantalla completa y luego "secuestrar" los botones de menú / atrás / buscar simplemente devolviendo false onKeyDown () ... y registrando la aplicación como una aplicación de inicio predeterminada, de esa manera, no hay forma de salir de la aplicación.
En Android 3.0 (Honeycomb), los botones de navegación (barra del sistema) siempre están presentes, me gustaría ocultarlo. ¿Es posible?
FYI, no estoy publicando esta aplicación en Android Market. Esta es una aplicación interna para dispositivos que se usarán internamente. Necesito asegurar el dispositivo.
android: theme = "@ android: style / Theme.Black.NoTitleBar.Fullscreen
o
mainView.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE)
No, la barra de tareas aún está allí, con tres puntos grises en lugar de iconos clásicos
A partir de 4.4, puede hacer esto (esta pregunta es muy antigua, pero siempre surge sobre este tema):
setSystemUiVisibility (View.SYSTEM_UI_FLAG_IMMERSIVE)
https://developer.android.com/training/system-ui/immersive.html
Aquí hay un código relacionado con mi respuesta anterior. Oculta automáticamente la barra de estado y la vuelve a mostrar cuando termina. Importante: para volver a mostrarlo, el código debe reiniciar system_server, lo que demorará un poco para reiniciarse y, durante ese tiempo, verá la animación de arranque en nido de abeja. Es el único que encuentro por ahora para mostrar la barra de estado de nuevo. Reiniciar SystemUI no es suficiente. Y debido a eso, cerrará su aplicación cuando reinicie system_server.
Este código necesita un sistema rooteado con el 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 ocultará 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 ocultará nuevamente después de unos segundos).
Asegúrese de haber especificado targetSdkVersion = "11" o superior en su manifiesto.
Como esto no es posible con una API pública, he encontrado una forma de hacerlo de una manera muy "hack-ish" que requiere un dispositivo rooteado.
Actualización: como user864555 apunta 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 deshabilita la aplicación SystemUI, que es la barra de menús. Lo que esa modificación, también obtendrá 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 vota por su respuesta. Trataré de mantener este actualizado tanto como pueda.
Actualización: Aquí hay un tercer método. Una forma de hacerlo programáticamente o usando la línea de comando. Encontrado aquí: http://android.serverbox.ch/?p=306
Este método requiere acceso raíz, pero no es necesario cambiar la densidad de la pantalla LCD, manteniendo el mismo que el original, y puede hacer que la barra de navegación de la interfaz de usuario sea realmente rápida y fácil sin tener que reiniciar cada vez.
La http://android.serverbox.ch/?p=306 también muestra cómo implementarla en su aplicación Android, recuerde que requiere root, y puede que no sea una buena idea hacerlo a menos que su aplicación se ejecute en un kiosco o en su propio dispositivo, por favor no implemente este método en una aplicación que se publica en el mercado Android o en cualquier lugar público.
Para detener / eliminar / deshabilitar la barra del sistema (debe ser su antes de emitir este comando):
$ service call activity 79 s16 com.android.systemui
Para restablecer la barra del sistema simplemente emita este comando:
$ am startservice -n com.android.systemui/.SystemUIService
Es fácil. Con suerte ICS se lanzará pronto junto con el código fuente para que cualquiera pueda construir Android para nuestras tabletas Kiosk.
La aplicación HideBar se puede utilizar para ocultar la barra del sistema en tabletas Android (HC, ICS, JB). Contiene un modo de quiosco opcional que se puede usar para bloquear por completo las tabletas y también otras opciones, como un botón oculto de retroceso. Es un software GPL. Póngase en contacto con el desarrollador (yo, consulte el correo electrónico en el sitio web de las aplicaciones) si esta aplicación debe instalarse en grandes volúmenes.
No puedes ocultar la barra del sistema en Android 3.0.
Para otros que han tenido este problema:
Si no ha configurado el android: targetSdkVersion correctamente en su archivo AndroidManaifest.xml, setSystemUiVisibility no tiene ningún efecto (a diferencia de otras API avanzadas que funcionan independientemente de si la targetSDKVersion se ha configurado correctamente o no).
Dejé accidentalmente mi targetSdkVersion en 8. Alterarlo a 16 causó de inmediato setSystemUIVisiblity para tener el efecto deseado.
Sí , es posible hacerlo si tiene acceso de administrador en el dispositivo.
Este código puede ocultar y mostrar StatusBar al eliminar el proceso y devolverlo.
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;
}
}
}
Si desea ocultar la barra de navegación a través de la aplicación, aquí está la manera más simple. solo escriba este código en la etiqueta de su aplicación en el archivo de manifiesto
> <Application
> android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" <!--
> other parameters of application tag-->
> >
Si tiene acceso al archivo del sistema, puede hacerlo (el mío está desbloqueado y rooteado, así que no estoy seguro de lo que necesita, no lo he intentado con un nuevo xoom de fábrica):
adb shell
cd /system/app/
mv SystemUI.odex SystemUI.odexold
mv SystemUI.apk SystemUI.apkold
exit
adb reboot
Ese código desactiva la aplicación SystemUI, que es la barra de menú en realidad. Con esa modificación, también ganará el espacio de esa barra de sistema, pero asegúrese de tener un botón de retroceso o algo para salir en su aplicación.
Editar:
Si tiene problemas con el archivo de solo lectura, debe montar el directorio /system
como lectura-escritura. Para hacerlo, use 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 solo lectura con ese comando:
mount -o remount,ro /dev/block/stl6 /system
Editar:
Estos métodos permiten que el teclado virtual se muestre normalmente cuando sea necesario.