Ocultar permanentemente la barra de estado de Android

Estoy tratando de ocultar la barra de estado del sistema en un dispositivo Android 4.4. Esto es para un modo de quiosco en el que mi aplicación será la única aplicación que se ejecute en el dispositivo. El dispositivo de destino por ahora es un Nexus 7 de 2013.

El dispositivo está enraizado, y he sido capaz de eliminar completamente la barra de navegación inferior con algo de información de este post .

Para la barra de estado superior, todo lo que he intentado sólo oculta temporalmente la barra. Si mis usuarios se mueven hacia abajo en la parte superior de la pantalla, la barra de estado vuelve a aparecer. No quiero permitirles que vean la hora, lleguen a la configuración o incluso vean las notificaciones.

Puestos que he encontrado y ya probado:

  • Ocultar barra de sistema en tabletas
  • Ocultar permanentemente la barra de navegación en la actividad
  • Ocultar barra de estado en android
  • Desactivar / Ocultar la barra de estado en Android

¿Alguna sugerencia?

Idealmente, me encantaría poder editar build.prop para hacer esto, ya que ya estoy haciendo eso para la barra de navegación, y podría hacer esto al mismo tiempo. Estoy tratando de no tener que construir mi propia imagen de Android.

Actualizar:

Después de un poco más de trabajo, esto parece depender un poco de la construcción exacta de android, o el dispositivo de su funcionamiento.

Algunos dispositivos, como la serie Nexus con la que he estado trabajando, permiten al usuario deslizar para que la barra vuelva a aparecer.

Sin embargo, recientemente he probado esto en un Verizon Eclipse, y la barra no reaparece, que es lo que estaba buscando.

Todavía estoy buscando una solución mejor para orientar todos los dispositivos, pero probablemente se reducirá a crear mi propia versión de android.

No pudimos evitar que el estado apareciera en modo de pantalla completa en los dispositivos kitkat, por lo que se hizo un hack que todavía se ajusta al requisito, es decir, bloquear la barra de estado de expandirse.

Para que funcione, la aplicación no se hizo a pantalla completa. Ponemos una superposición sobre la barra de estado y consumimos todos los eventos de entrada. Evitó que el estatus se expandiera.

Nota:

  • CustomViewGroup es una clase personalizada que extiende cualquier diseño (marco, diseño relativo, etc) y consume evento táctil.
  • Para consumir el evento táctil anula el método onInterceptTouchEvent del grupo de vistas y devuelve true

Actualizado

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 

Implementación de customViewGroup Código:

 WindowManager manager = ((WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE)); WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams(); localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR; localLayoutParams.gravity = Gravity.TOP; localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| // this is to enable the notification to recieve touch events WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | // Draws over status bar WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; localLayoutParams.height = (int) (50 * getResources() .getDisplayMetrics().scaledDensity); localLayoutParams.format = PixelFormat.TRANSPARENT; customViewGroup view = new customViewGroup(this); manager.addView(view, localLayoutParams); 

Espero que esto te ayude

He probado la solución proporcionada por @gonglong, pero no estaba contento con el resultado debido a un flash en la interfaz de usuario como la solución se inició.

En su lugar, pude hacer esto como root:

 settings put secure user_setup_complete 0 

Creo que en un dispositivo normal, esto causaría la instalación inicial del dispositivo para iniciar, pero en mis dispositivos, he quitado ese APK del sistema para que no suceda.

Esto no está documentado en ningún lugar que pueda encontrar, pero tiene un efecto agradable, donde la interfaz de usuario de configuración superior no se puede arrastrar hacia abajo. El área de notificaciones todavía se puede arrastrar hacia abajo.

Otro escenario que me pareció útil fue:

 settings put global device_provisioned 0 

Esto oculta las opciones Modo Avión y Modo Silencioso en el menú Energía, lo cual es una ventaja adicional para mi aplicación.

Puede haber más efectos secundarios, pero aún no he encontrado ninguno que me importe.

Lista llena

Esta lista fue tomada de un Nexus 7 2013 LTE funcionando nuevo Android 4.4.3 (KTU84L). El número entre corchetes es el valor cuando extraje el archivo db, que fue después de la configuración básica del dispositivo de configuración y la habilitación de desarrollador / USB, pero antes de realizar cualquier otro cambio en la configuración

Este archivo se encontró en data/data/com.android.providers.settings/databases/settings.db

Nota: Algunos URLS requieren agregar un carácter de espacio extra para omitir filtros SO

Namespace del system

  • Volumen_music [11]
  • Volumen_ring [5]
  • Volumen_sistema [7]
  • Volumen_voto [4]
  • Volume_alarm [6]
  • Volumen_notificación [5]
  • Volumen_bluetooth_sco [7]
  • Mode_ringer_streams_affectado [174]
  • Mute_streams_affectado [46]
  • Vibrate_when_ringing [0]
  • Dim_screen [1]
  • Dtmf_tone_type [0]
  • Audience_aid [0]
  • Tty_mode [0]
  • Screen_brightness [87]
  • Screen_brightness_mode [1]
  • Window_animation_scale [1.0]
  • Transition_animation_scale [1.0]
  • Acelerometría [1]
  • Haptic_feedback_enabled [1]
  • Notification_light_pulse [1]
  • Dtmf_tone [1]
  • Sound_effects_enabled [1]
  • Lockscreen_sounds_enabled [1]
  • Pointer_speed [0]
  • Alarm_alert [contenido: // media / internal / audio / media / 11]
  • Notification_sound [contenido: // media / internal / audio / media / 27]
  • Ringtone [contenido: // media / internal / audio / media / 35]
  • Next_alarm_formatted []
  • Radio.data.stall.recovery.action [0]
  • Screen_off_timeout [30000]

global nombres global

  • Avion_mode_on [0]
  • Avion_mode_radios [celda, bluetooth, wifi, nfc, wimax]
  • Avion_mode_toggleable_radios [bluetooth, wifi, nfc]
  • Auto_time [1]
  • Auto_time_zone [1]
  • Stay_on_while_plugged_in [0]
  • Wifi_sleep_policy [2]
  • Mode_ringer [2]
  • Package_verifier_enable [1]
  • Wifi_networks_available_notification_on [1]
  • Bluetooth_on [0]
  • Cdma_cell_broadcast_sms [1]
  • Data_roaming [0]
  • Mobile_data [1]
  • Netstats_enabled [1]
  • Install_non_market_apps [0]
  • Usb_mass_storage_enabled [1]
  • Wifi_max_dhcp_retry_count [9]
  • Wifi_display_on [0]
  • Lock_sound [/system/media/audio/ui/Lock.ogg]
  • Unlock_sound [/system/media/audio/ui/Unlock.ogg]
  • Power_sounds_enabled [1]
  • Low_battery_sound [/system/media/audio/ui/LowBattery.ogg]
  • Dock_sounds_enabled [0]
  • Desk_dock_sound [/system/media/audio/ui/Dock.ogg]
  • Desk_undock_sound [/system/media/audio/ui/Undock.ogg]
  • Car_dock_sound [/system/media/audio/ui/Dock.ogg]
  • Car_undock_sound [/system/media/audio/ui/Undock.ogg]
  • Wireless_charging_started_sound [/system/media/audio/ui/WirelessChargingStarted.ogg]
  • Dock_audio_media_enabled [1]
  • Set_install_location [0]
  • Default_install_location [0]
  • Emergency_tone [0]
  • Call_auto_retry [0]
  • Preferred_network_mode [9]
  • Modalidad de suscripción [1]
  • Low_battery_sound_timeout [3600000]
  • Wifi_watchdog_on [1]
  • Audio_safe_volume_state [1]
  • Send_action_app_error [1]
  • Web_autofill_query_url [http: // android.clients.google.com/proxy/webautofill]
  • Sms_short_codes_content_url [ http://www.gstatic.com/android/config_update/07172013-sms-blacklist.txt%5D
  • Sms_short_codes_metadata_url [ http://www.gstatic.com/android/config_update/07172013-sms-metadata.txt%5D
  • Cert_pin_metadata_url [ http://www.gstatic.com/android/config_update/10142013-metadata.txt%5D
  • Cert_pin_content_url [ http://www.gstatic.com/android/config_update/10142013-pins.txt%5D
  • Wifi_on [1]
  • Asistida_gps_enabled [1]
  • Wifi_scan_always_enabled [1]
  • Device_provisioned [1]
  • Bugreport_in_power_menu [0]
  • Development_settings_enabled [1]
  • Adb_enabled [1]
  • Wifi_country_code [us]

secure nombres secure

  • Wifi_watchdog_watch_list [GoogleGuest]
  • Mock_location [0]
  • Backup_enabled [0]
  • Backup_transport [com.google.android.backup / .BackupTransportService]
  • Mount_play_not_snd [1]
  • Mount_ums_autostart [0]
  • Mount_ums_prompt [1]
  • Mount_ums_notify_enabled [1]
  • Accessibilidad_script_injection [0]
  • Accessibility_web_content_key_bindings [0x13 = 0x01000100; 0x14 = 0x01010100; 0x15 = 0x02000001; 0x16 = 0x02010001; 0x200000013 = 0x02000601; 0x200000014 = 0x02010601; 0x200000015 = 0x03020101; 0x200000016 = 0x03010201; 0x200000023 = 0x02000301; 0x200000024 = 0x02010301; 0x200000037 = 0x03070201; 0x200000038 = 0x03000701: 0x03010701: 0x03020701;]
  • Long_press_timeout [500]
  • Touch_exploration_enabled [0]
  • Speak_password [0]
  • Accessibility_script_injection_url [ https://ssl.gstatic.com/accessibility/javascript/android/AndroidVox_v1.js%5D
  • Lockscreen.disabled [0]
  • Screensaver_enabled [1]
  • Screensaver_activate_on_dock [1]
  • Screensaver_activate_on_sleep [0]
  • Screensaver_components [com.google.android.deskclock / com.android.deskclock.Screensaver]
  • Screensaver_default_component [com.google.android.deskclock / com.android.deskclock.Screensaver]
  • Accessibility_display_magnification_enabled [0]
  • Accessibility_display_magnification_scale [2.0]
  • Accessibility_display_magnification_auto_update [1]
  • Android_id [a0ef8b2a9ade982c]
  • Enabled_input_methods [com.google.android.inputmethod.latin / com.android.inputmethod.latin.LatinIME: com.google.android.googlequicksearchbox / com.google.android.voicesearch.ime.VoiceInputMethodService]
  • Input_methods_subtype_history []
  • Selected_input_method_subtype [-1]
  • Selected_spell_checker [com.google.android.inputmethod.latin / com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService]
  • Selected_spell_checker_subtype [0]
  • Lock_screen_owner_info_enabled [0]
  • Voice_recognition_service [com.google.android.googlequicksearchbox / com.google.android.voicesearch.serviceapi.GoogleRecognitionService]
  • Default_input_method [com.google.android.inputmethod.latin / com.android.inputmethod.latin.LatinIME]
  • Enabled_print_services [com.google.android.apps.cloudprint / com.google.android.apps.cloudprint.printdialog.services.CloudPrintService: com.hp.android.printservice / com.hp.android.printservice.ServiceAndroidPrint]
  • Enabled_on_first_boot_system_print_services [com.google.android.apps.cloudprint / com.google.android.apps.cloudprint.printdialog.services.CloudPrintService: com.hp.android.printservice / com.hp.android.printservice.ServiceAndroidPrint]
  • Bluetooth_name [Nexus 7]
  • MasterLocationPackagePrefixBlacklist [com.google., Com.semaphoremobile.zagat.android]
  • Serial_blacklist [827,864]
  • Dropbox: data_app_anr [desactivado]
  • Dropbox: data_app_wtf [desactivado]
  • Ssl_session_cache [archivo]
  • Pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61,783333c9687df63377efceddd82efa9101913e8e]
  • Facelock_liveliness_recognition_threshold [2.2]
  • Facelock_detection_threshold [0.0]
  • Dropbox: data_app_crash [desactivado]
  • MasterLocationPackagePrefixWhitelist [com.google.android.gms]
  • Lockscreen.options [enable_facelock]
  • Facelock_max_center_movement [10.0]
  • Bluetooth_address [AC: 22: 0B: A5: AF: 3D]
  • Bluetooth_addr_valid [1]
  • Config_update_certificate [ contenido de base64 truncado ]
  • Location_providers_allowed [gps, red]
  • Allowed_geolocation_origins [ http://www.google.co.uk http: // http://www.google.com]
  • LocationPackagePrefixBlacklist []
  • User_setup_complete [1]
  • LocationPackagePrefixWhitelist []
  • Last_setup_shown [eclair_1]

Sé que esta es una vieja pregunta, pero espero que ayude a alguien. Aquí hay dos llamadas muy simples para deshabilitar y habilitar la barra de estado que he usado antes. Puede ser utilizado desde la línea de comandos o ejecutado por una aplicación Java:

Inhabilitar:

 service call activity 42 s16 com.android.systemui 

Habilitar:

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

No tengo una solución perfecta pero una solución. La idea básica es escuchar los cambios de estado del sistema ui y forzar la barra de navegación / estado como invisible. Tiene efecto similar al establecer el modo IMMERSIVE_STICKY pero la barra de navegación / estado que desaparece es más rápida que IMMERSIVE_STICKY.

aquí está:

Establecer el estilo del sistema ui en onCreate () y on onResume función, y establecer el sistema ui cambio de escucha

  mDecroView.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); mDecroView.setOnSystemUiVisibilityChangeListener(this); 

Forzar la barra del sistema como invisible en onSystemUiVisibilityChange, configurando el sistema ui unos segundos más tarde de lo contrario, tendría efecto (no se sabe exactamente por qué, tal vez el sistema ignora la solicitud de configuración del sistema ui cuando la barra del sistema no se ha completado)

  public void onSystemUiVisibilityChange(int visibility) { // TODO Auto-generated method stub Log.d(TAG, "onSystemUiVisibilityChange called with visibility " + visibility); if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0){ if(null == mHandler){ mHandler = new MyHandler(); } if(null != mHandler){ mHandler.removeMessages(MSG_HIDE_SYSTEM_BAR); mHandler.sendEmptyMessageDelayed(MSG_HIDE_SYSTEM_BAR, 50); } //the deccro view is not in full screen Log.d(TAG, "setSystemUiVisibility"); Log.d(TAG, "current system ui is " + mDecroView.getSystemUiVisibility()); } } 

Entonces usted puede establecer el sistema ui como este:

 public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch(msg.what){ case MSG_HIDE_SYSTEM_BAR: mDecroView.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); break; } } 

Una gran solución encontré para ese problema, estableciendo cada theme Activity & windowSoftInputMode en los siguientes valores:

 <activity android:name=".MyActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="adjustResize"> <!-- theme : to set the activity to a full screen mode without a status bar(like in some games) --> </activity> <!-- windowSoftInputMode : to resize the activity so that it fits the condition of displaying a softkeyboard --> 

Para más información, consulte aquí .

Agregue esto antes: setContentView (R.layout.x);

 this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.x); 
  • Problemas de compatibilidad de interfaz de usuario entre diferentes versiones de API
  • Cajón de navegación debajo de la Barra de Acción
  • No se puede encontrar la imagen del sistema en Emulator en Android Studio con API de Google
  • Cómo configurar el SMS predeterminado para KitKat
  • Ejecutar KitKat Virtual Device en la CPU Intel
  • Establecer la configuración del bloqueo de pantalla interactivamente
  • Alerta de error de Eclipse al abrir el diseño de gráficos
  • Las instrucciones de modo inmersivo vuelven a aparecer cada vez que el dispositivo entra en este modo
  • Android 4.4 errores api http?
  • Lost appCache de Android 4.4 WebView
  • Android 4.4: ¿es válido el permiso WRITE_EXTERNAL_STORAGE en el almacenamiento externo primario / mnt / sdcard?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.