play - ocultar iconos de la barra de estado android
Permanentemente ocultar la barra de estado de Android (7)
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 compilació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.
He usado esta respuesta para ocultar las teclas programables: https://.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 aSystemUI.apk
puede ser diferenteextraiga
framework-res.apk
de su dispositivoadb pull /system/framework/framework-res.apk
la ruta de acceso aframework-res.apk
puede ser diferenteejecutar
apktool if framework-res.apk
ejecutar
apktool if SystemUI.apk
ejecutar
apktool d SystemUI.apk
Abra
SystemUI/res/layout/status_bar.xml
y agregueandroid:visibility="gone"
al elemento xml superior (para mí fuecom.android.systemui.statusbar.phone.PhoneStatusBarView
)ejecutar
apktool b SystemUI
Vaya a
SystemUI/original
y copieAndroidManifest.xml
yMETA-INF
enSystemUI/build/apk/
ejecutar
apktool b SystemUI
nuevamenteVaya a
SystemUI/dist/
y anule laSystemUI.apk
original del dispositivo con la deSystemUI/dist/SystemUI.apk
conadb 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
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]
- sms_short_codes_metadata_url [ http://www.gstatic.com/android/config_update/07172013-sms-metadata.txt]
- cert_pin_metadata_url [ http://www.gstatic.com/android/config_update/10142013-metadata.txt]
- cert_pin_content_url [ http://www.gstatic.com/android/config_update/10142013-pins.txt]
- 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]
- 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 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 (fotograma, 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
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
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
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;
}
}
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
Una gran solución que encontré para ese problema, estableciendo cada theme
Actividad & windowSoftInputMode
a 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);