Cacher de façon permanente la barre D'État Android
j'essaie de cacher la barre d'État du système sur un appareil Android 4.4. Ceci est pour un kiosk-mode où mon application sera la seule application jamais fonctionner sur l'appareil. Le dispositif cible pour le moment est un Nexus 7 de 2013.
le dispositif est enraciné, et j'ai été en mesure d'enlever complètement la barre de Navigation inférieure avec quelques informations de ce post .
pour la barre de statut supérieure, tout ce que j'ai essayé ne cache la barre que temporairement. Si mon les utilisateurs se déplacent en haut de l'écran, la barre d'état réapparaît. Je ne veux pas leur permettre de voir l'heure, les réglages ou même les notifications.
postes que j'ai trouvé et déjà essayé:
- Masquer la Barre Système en Comprimés
- barre de navigation cachée en permanence sur l'activité
- Masquer la barre d'état sur android
- Désactiver/Masquer la barre d'état Android
des suggestions?
idéalement, j'aimerais pouvoir éditer build.prop pour faire ceci, puisque je fais déjà cela pour la barre de navigation, et pourrait le faire en même temps. J'essaie de ne pas avoir à construire ma propre image d'androïde.
mise à jour:
Après un peu plus de travail, ce semble dépendre un peu de la construction exacte d'android, ou l'appareil son fonctionnement sur.
certains appareils, comme la série Nexus avec laquelle j'ai travaillé, permettent à l'utilisateur de glisser pour faire réapparaître la barre.
cependant, j'ai récemment essayé cela sur une éclipse de Verizon, et la barre ne réapparaît pas, ce qui est ce que je cherchais.
je suis toujours à la recherche d'une meilleure solution pour cibler tous les appareils, mais il sera probablement revenir à la création de mon propre build d'android.
7 réponses
nous ne pouvions pas empêcher l'état apparaissant en mode plein écran dans les appareils kitkat, donc fait un hack qui convient toujours à l'exigence, c'est-à-dire empêcher la barre d'état de s'étendre.
Pour que cela fonctionne, l'application n'a pas été faite en plein écran. Nous avons placé une superposition sur la barre d'état et consommé tous les événements d'entrée. Cela a empêché le statut de s'étendre.
note:
- customViewGroup est une classe personnalisée qui étend toute layout (frame,relative layout etc) et consomme l'événement tactile.
- à consommer de l'événement tactile remplacer la onInterceptTouchEvent méthode de le point de vue du groupe et retourne true
mise à Jour
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
customViewGroup mise en œuvre Code:
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);
Espère que cela vous aide à
je sais que c'est une vieille question, mais j'espère que ça aidera quelqu'un. Voici deux appels très simples pour désactiver et activer la barre d'état que j'ai utilisée auparavant. Peut être utilisé depuis la ligne de commande ou exécuté par une application Java:
Désactiver:
service call activity 42 s16 com.android.systemui
Activer:
am startservice -n com.android.systemui/.SystemUIService
j'ai essayé la solution de contournement fournie par @gonglong, mais je n'ai pas été heureux du résultat à cause d'un flash dans L'interface utilisateur pendant que la solution de contournement a commencé.
au lieu de cela, j'ai pu le faire comme root:
settings put secure user_setup_complete 0
je pense que sur un appareil normal, cela provoquerait la configuration initiale de l'appareil pour démarrer, mais sur mes appareils, j'ai retiré cette APK du système pour que cela n'arrive pas.
ce n'est documenté nulle part que je puisse trouver, mais a un bel effet, où L'interface utilisateur TOP settings ne peut pas être entraînée vers le bas. La zone de notification peut encore être rabattue.
un autre paramètre que j'ai trouvé utile était:
settings put global device_provisioned 0
cela cache le Mode avion et les options de mode silencieux du menu Power, qui est un bonus supplémentaire pour mon application.
il y a peut-être plus d'effets secondaires, mais je n'en ai pas encore trouvé qui comptent pour moi.
Liste Complète
cette liste a été tirée d'un Nexus 7 LTE 2013 tournant sous Android 4.4.3 (KTU84L). Le nombre entre crochets est la valeur quand j'ai tiré le fichier db, qui était après la configuration de base du périphérique de configuration et l'activation du développeur/USB, mais avant de faire d'autres changements dans les paramètres
ce fichier a été trouvé à data/data/com.android.providers.settings/databases/settings.db
Note: certaines URL nécessitaient l'ajout d'un caractère d'espace supplémentaire pour contourner les filtres SO
system
l'espace de noms
- 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_ringinging [0]
- dim_screen [1]
- dtmf_tone_type [0]
- hearing_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_enabled [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]
- sonnerie [content: / / media/internal/audio/media / 35]
- next_alarm_formatted []
- de la radio.données.décrochage.récupération.action [0]
- screen_off_timeout [30000]
global
espace de noms
- airplane_mode_on [0]
- airplane_mode_radios [cellule,le bluetooth,le wifi,le nfc,la technologie 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_restry_count [9]
- wifi_display_on [0]
- lock_sound [/system/media/audio/ui / Lock.ogg]
- unlock_sound [/system/media/audio/ui/Déverrouiller.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_restry [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_metatata_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_enabled [1]
- wifi_scan_always_enabled [1]
- device_prévisioned [1]
- bugreport_in_power_menu [0]
- development_settings_enabled [1]
- adb_enabled [1]
- wifi_country_code [us]
secure
espace de noms
- wifi_watchdog_watch_list [GoogleGuest]
- mock_location [0]
- backup_enabled [0]
- backup_transport [com.Google.Android.sauvegarde./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; 0x2000016=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]
- lockscreen.handicapés [0]
- screensaver_enabled [1]
- screensaver_activate_on_dock [1]
- screensaver_activate_on_sleep [0]
- screensaver_components [com.Google.Android.deskclock / com.Android.deskclock.Économiseur d'écran]
- screensaver_default_component [com.Google.Android.deskclock / com.Android.deskclock.Économiseur d'écran]
- accessibility_display_magnification_enabled [0]
- accessibility_display_magnification_scale [2.0]
- accessibilité _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.vérifier l'orthographe.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.des apps.cloudprint / com.Google.Android.des apps.cloudprint.printdialog.service.CloudPrintService: com.HP.Android.printservice / com.HP.Android.printservice.ServiceAndroidPrint]
- " enabled_on_first_boot_system_print_services [COM.Google.Android.des apps.cloudprint / com.Google.Android.des apps.cloudprint.printdialog.service.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 [désactivé]
- dropbox:data_app_wtf [désactivé]
- ssl_session_cache [fichier]
- pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61, 783333c9687df63377efceddd82efa9101913e8e]
- facelock_liveliness_recognition_threshold [2.2]
- facelock_detection_threshold [0.0]
- dropbox:data_app_crash [désactivé]
- 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 [ truncated base64 content ]
- location_providers_allowed [gps, réseau]
- autorised_geolocation_origins [ http://www.google.co.uk http:// www.google.com]
- locationPackagePrefixBlacklist []
- user_setup_complete [1]
- locationPackagePrefixWhitelist []
- last_setup_shown [eclair_1]
je n'ai pas de solution parfaite, mais une solution de contournement. L'idée de base est d'écouter les changements de statut du système ui et de forcer la barre de navigation/statut comme invisible. Il prend effet aussi similaire que le réglage du mode IMMERSIVE_STICKY, mais la disparition de la barre de navigation/statut est plus rapide que IMMERSIVE_STICKY.
le voici:
système d'ensemble de l'interface utilisateur de style dans onCreate() et sur onResume fonction, et de définir l'interface utilisateur du système de changement écouteur
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);
la barre de système de force comme invisible dans onSystemUiVisibilityChange, le réglage de l'ui de système quelques secondes plus tard sinon il prendrait effet (ne sait pas exactement pourquoi, peut-être que le système ignore juste la demande de réglage de l'ui de système quand barre de système montre pas encore terminé)
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());
}
}
alors vous pouvez définir le système ui comme ceci:
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;
}
}
une excellente solution que j'ai trouvé pour cette question, en plaçant chaque activité theme
et windowSoftInputMode
aux valeurs suivantes:
<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 -->
pour plus d'informations voir ici .
j'ai utilisé cette réponse pour cacher les softkeys: https://stackoverflow.com/a/27003890/1525867
et pour désactiver le StatusBar (cela peut nuire à votre appareil alors faites-le soigneusement. J'ai ruiné mon appareil plusieurs fois avant de réussir à le faire) testé sur Asus Tinker Board, Android 6:
- télécharger apktool d'ici https://bitbucket.org/iBotPeaches/apktool/downloads / et ajoutez - le à
path
de votre façon préférée -
tirer
SystemUI.apk
de votre appareil:adb pull /system/priv-app/SystemUI/SystemUI.apk
le chemin versSystemUI.apk
peut être différent "
-
pull
framework-res.apk
de votre appareiladb pull /system/framework/framework-res.apk
le chemin versframework-res.apk
peut être différent -
exécuter
apktool if framework-res.apk
-
exécuter
apktool if SystemUI.apk
-
exécuter
apktool d SystemUI.apk
-
Open
SystemUI\res\layout\status_bar.xml
et ajouterandroid:visibility="gone"
à l'élément xml le plus en haut (pour moi c'étaitcom.android.systemui.statusbar.phone.PhoneStatusBarView
) -
exécuter
apktool b SystemUI
-
Aller à
SystemUI\original
et "copie de 1519150920" etMETA-INF
àSystemUI\build\apk\
-
exécuter
apktool b SystemUI
de nouveau -
passez à
SystemUI\dist\
et outrepassez leSystemUI.apk
original de l'appareil avec celui àSystemUI\dist\SystemUI.apk
avecadb push SystemUI\dist\SystemUI.apk /system/priv-app/SystemUI/SystemUI.apk
-
Redémarrer l'appareil
basé sur ce fil https://forum.xda-developers.com/showthread.php?t=2203166
ajouter avant: 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);