Permanentemente ocultar la barra de estado de Android

Intento 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 que se ejecute en el dispositivo. El dispositivo de destino por ahora es un 2013 Nexus 7.

El dispositivo está rooteado y pude eliminar completamente la barra de navegación inferior con información de esta publicación .

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

Publicaciones que encontré y que ya probé:

  • Ocultar barra de sistema en tabletas
  • Ocultar permanentemente la barra de navegación en la actividad
  • Ocultar barra de estado en Android
  • Deshabilitar / Ocultar 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 tanto de la comstackción exacta de Android, o del dispositivo en el que se ejecuta.

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

Sin embargo, recientemente probé esto en Verizon Eclipse, y la barra no reaparece, que es lo que estaba buscando.

Todavía estoy buscando una mejor solución para apuntar a todos los dispositivos, pero probablemente se reducirá a la creación de mi propia versión de Android.

No pudimos evitar que el estado apareciera en modo de pantalla completa en dispositivos kitkat, por lo que se creó un truco que aún se ajusta al requisito, es decir, impide que la barra de estado se expanda.

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

Nota:

  • customViewGroup es una clase personalizada que amplía cualquier diseño (fotogtwig, diseño relativo, etc.) y consume eventos táctiles.
  • consumir evento táctil anula el método onInterceptTouchEvent del grupo de vista y devuelve true

Actualizado

 

código de implementación customViewGroup :

 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

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 anteriormente. Puede usarse desde la línea de comandos o ejecutarse mediante una aplicación Java:

Inhabilitar:

 service call activity 42 s16 com.android.systemui 

Habilitar:

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

Intenté la solución provista por @gonglong, pero no estaba contento con el resultado debido a un flash en la interfaz de usuario cuando se produjo la solución.

En cambio, pude hacer esto como root:

 settings put secure user_setup_complete 0 

Creo que en un dispositivo normal, esto provocaría que se iniciara la configuración inicial del dispositivo, pero en mis dispositivos, eliminé esa APK del sistema para que eso no ocurra.

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

Otra configuración que encontré útil fue:

 settings put global device_provisioned 0 

Esto oculta las opciones Modo de avión y Modo silencioso del menú de Encendido, que 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 con la nueva marca Android 4.4.3 (KTU84L). El número entre corchetes es el valor cuando extraje el archivo db, que estaba después de la configuración básica del dispositivo de configuración y habilita el desarrollador / USB, pero antes de realizar cualquier otro cambio en la configuración

Este archivo fue encontrado en data/data/com.android.providers.settings/databases/settings.db

Nota: Algunas URL requerían agregar un carácter de espacio adicional para eludir los filtros SO.

espacio de nombres del system

  • volume_music [11]
  • volume_ring [5]
  • volume_system [7]
  • volume_voice [4]
  • volume_alarm [6]
  • volume_notification [5]
  • volume_bluetooth_sco [7]
  • mode_ringer_streams_affected [174]
  • mute_streams_affected [46]
  • vibrate_when_ringing [0]
  • dim_screen [1]
  • dtmf_tone_type [0]
  • audiencia_aid [0]
  • tty_mode [0]
  • screen_brightness [87]
  • screen_brightness_mode [1]
  • window_animation_scale [1.0]
  • transition_animation_scale [1.0]
  • accelerometer_rotation [1]
  • haptic_feedback_ habilitado [1]
  • notification_light_pulse [1]
  • dtmf_tone [1]
  • sound_effects_enabled [1]
  • lockscreen_sounds_enabled [1]
  • pointer_speed [0]
  • alarm_alert [content: // media / internal / audio / media / 11]
  • notification_sound [content: // media / internal / audio / media / 27]
  • tono de llamada [contenido: // media / interno / audio / multimedia / 35]
  • next_alarm_formatted []
  • radio.data.stall.recovery.action [0]
  • screen_off_timeout [30000]

espacio de nombres global

  • airplane_mode_on [0]
  • airplane_mode_radios [cell, bluetooth, wifi, nfc, wimax]
  • airplane_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]
  • subscription_mode [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]
  • assisted_gps_ habilitado [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]

espacio de 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]
  • accessibility_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_ habilitado [0]
  • speak_password [0]
  • accessibility_script_injection_url [ https://ssl.gstatic.com/accessibility/javascript/android/AndroidVox_v1.js%5D
  • lockscreen.disabled [0]
  • screensaver_ habilitado [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 [disabled]
  • dropbox: data_app_wtf [deshabilitado]
  • ssl_session_cache [archivo]
  • pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61,783333c9687df63377efceddd82efa9101913e8e]
  • facelock_liveliness_recognition_threshold [2.2]
  • facelock_detection_threshold [0.0]
  • dropbox: data_app_crash [deshabilitado]
  • 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 base64 truncado ]
  • location_providers_allowed [gps, network]
  • allowed_geolocation_origins [ http://www.google.co.uk http: //www.google.com ]
  • locationPackagePrefixBlacklist []
  • user_setup_complete [1]
  • locationPackagePrefixWhitelist []
  • last_setup_shown [eclair_1]

No tengo una solución perfecta, pero una solución aquí. La idea básica es escuchar los cambios de estado de la interfaz de usuario del sistema y forzar la barra de navegación / estado como invisible. Surte efecto de manera similar a la configuración del modo IMMERSIVE_STICKY pero desapareciendo la barra de navegación / estado más rápido que IMMERSIVE_STICKY.

aquí está:

establecer el estilo de interfaz de usuario del sistema en onCreate () y en la función onResume, y configurar el oyente de cambio del sistema ui

  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); 

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

  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 puedes configurar la interfaz de usuario del sistema de esta manera:

 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 que encontré para ese problema, estableciendo cada theme Actividad & windowSoftInputMode a los siguientes valores:

     

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

He usado esta respuesta para ocultar las teclas progtwigbles: https://stackoverflow.com/a/27003890/1525867

Y para deshabilitar StatusBar (esto puede dañar su dispositivo, hágalo carfully. He arruinado mi dispositivo varias veces antes de que pudiera hacerlo) Probado en Asus Tinker Board, Android 6:

  • Descargue apktool desde aquí https://bitbucket.org/iBotPeaches/apktool/downloads/ y agréguelo al path de su manera favorita
  • extraiga SystemUI.apk de su dispositivo: adb pull /system/priv-app/SystemUI/SystemUI.apk la ruta a SystemUI.apk puede ser diferente

  • extraiga framework-res.apk de su dispositivo adb pull /system/framework/framework-res.apk la ruta de acceso a framework-res.apk puede ser diferente

  • ejecutar apktool if framework-res.apk

  • ejecutar apktool if SystemUI.apk

  • ejecutar apktool d SystemUI.apk

  • Abra SystemUI\res\layout\status_bar.xml y agregue android:visibility="gone" al elemento xml superior (para mí fue com.android.systemui.statusbar.phone.PhoneStatusBarView )

  • ejecutar apktool b SystemUI

  • Vaya a SystemUI\original y copie AndroidManifest.xml y META-INF en SystemUI\build\apk\

  • ejecutar apktool b SystemUI nuevamente

  • Vaya a SystemUI\dist\ y anule la SystemUI.apk original del dispositivo con la de SystemUI\dist\SystemUI.apk con adb push SystemUI\dist\SystemUI.apk /system/priv-app/SystemUI/SystemUI.apk

  • Reiniciar el dipositivo

Basado en este hilo https://forum.xda-developers.com/showthread.php?t=2203166

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); 
Intereting Posts