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.

35
demandé sur Community 2014-01-27 05:53:40

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 à

30
répondu Abhimaan 2014-10-30 07:23:35

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
17
répondu D. Gibbs 2015-05-06 20:42:17

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]
14
répondu dtyler 2014-07-29 15:07:55

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;
        }
    }
2
répondu gonglong 2014-04-16 02:18:57

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 .

2
répondu Muhammed Refaat 2014-10-02 10:30:17

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 vers SystemUI.apk peut être différent

  • "
  • pull framework-res.apk de votre appareil adb pull /system/framework/framework-res.apk le chemin vers framework-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 ajouter android:visibility="gone" à l'élément xml le plus en haut (pour moi c'était com.android.systemui.statusbar.phone.PhoneStatusBarView )

  • exécuter apktool b SystemUI

  • Aller à SystemUI\original et "copie de 1519150920" et META-INF à SystemUI\build\apk\

  • exécuter apktool b SystemUI de nouveau

  • passez à SystemUI\dist\ et outrepassez le SystemUI.apk original de l'appareil avec celui à SystemUI\dist\SystemUI.apk avec adb 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

1
répondu AvielNiego 2018-02-27 13:17:22

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);
0
répondu DiegoAlt 2014-01-27 05:21:28