永久隐藏Android状态栏

我试图在Android 4.4设备上隐藏系统状态栏。 这是一个自助terminal模式,我的应用程序将成为设备上运行的唯一应用程序。 目前的目标设备是2013年的Nexus 7。

该设备是扎根,我已经能够完全删除这个职位的一些信息的底部导航栏。

对于顶部的状态栏,我所尝试的一切只是暂时隐藏栏。 如果我的用户在屏幕顶部向下移动,状态栏会再次出现。 我不想让他们看到时间,进入设置甚至看到通知。

我发现并已经尝试过的post:

  • 隐藏平板电脑中的系统栏
  • 永久隐藏活动的导航栏
  • android上隐藏状态栏
  • 在Android中禁用/隐藏状态栏

有什么build议么?

理想情况下,我希望能够编辑build.prop来做到这一点,因为我已经在做导航栏,并可以在同一时间做到这一点。 我试图不必build立自己的Android图像。

更新:

经过一些更多的工作,这似乎取决于Android的确切构build或其运行的设备。

一些设备,例如我一直在使用的Nexus系列,允许用户滑动以使条形图重新出现。

不过,我最近在Verizon Eclipse上试了一下,这个酒吧并没有出现,这正是我所期待的。

我仍然在寻找一个更好的解决scheme来定位所有的设备,但它可能会归结为创build我自己的Android版本。

Solutions Collecting From Web of "永久隐藏Android状态栏"

我们无法防止kitkat设备在全屏模式下出现状态,所以做了一个仍然符合要求的黑客,即阻止状态栏扩展。

为了这个工作,该应用程序不是全屏。 我们在状态栏上覆盖了所有的input事件。 它阻止了地位的扩大。

注意:

  • customViewGroup是自定义类,它扩展了任何布局(框架,相对布局等)并消耗触摸事件。
  • 使用触摸事件覆盖视图组的onInterceptTouchEvent方法并返回true

更新

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

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

希望这可以帮助你

我知道这是一个古老的问题,但希望它会帮助别人。 这里有两个非常简单的调用来禁用和启用我以前使用的状态栏。 可以从命令行使用或由Java应用程序执行:

禁用:

 service call activity 42 s16 com.android.systemui 

启用:

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

我尝试了@gonglong提供的解决方法,但是由于UI中出现了一个闪光灯,所以我不满意这个结果。

相反,我能够以root身份执行此操作:

 settings put secure user_setup_complete 0 

我想在一个普通的设备上,这将导致初始设备设置启动,但在我的设备上,我已经从系统中删除了这个APK,所以不会发生。

这是没有logging在任何地方,我可以find,但有一个很好的效果,顶级设置的用户界面不能被拖下去。 通知区域仍然可以被拖拽。

另一个我觉得有用的设置是:

 settings put global device_provisioned 0 

这隐藏了“电源”菜单中的“飞行模式”和“静音模式”选项,这是我的应用程序的额外好处。

可能会有更多的副作用,但我还没有find任何重要的东西给我。

完整列表

该列表取自Nexus 7 2013 LTE运行的全新Android 4.4.3(KTU84L)。 方括号中的数字是我拉取db文件时的数值,这是在基本设置设备设置和启用开发人员/ USB之后,但在对设置进行任何其他更改之前

该文件位于data/data/com.android.providers.settings/databases/settings.db

注意:某些URL需要添加额外的空格字符来绕过SOfilter

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]
  • 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]
  • 铃声[内容://媒体/内部/audio/媒体/ 35]
  • next_alarm_formatted []
  • radio.data.stall.recovery.action [0]
  • screen_off_timeout [30000]

global命名空间

  • airplane_mode_on [0]
  • airplane_mode_radios [cell,bluetooth,wifi,nfc,wimax]
  • airplane_mode_toggleable_radios [蓝牙,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_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 [我们]

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; 0×14 = 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 [禁用]
  • dropbox:data_app_wtf [禁用]
  • ssl_session_cache [文件]
  • pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61,783333c9687df63377efceddd82efa9101913e8e]
  • facelock_liveliness_recognition_threshold [2.2]
  • facelock_detection_threshold [0.0]
  • dropbox:data_app_crash [禁用]
  • 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 [ 截断的base64内容 ]
  • location_providers_allowed [gps,networking]
  • allowed_geolocation_origins [ http://www.google.co.uk http:// http://www.google.com]
  • locationPackagePrefixBlacklist []
  • user_setup_complete [1]
  • locationPackagePrefixWhitelist []
  • last_setup_shown [eclair_1]

我没有一个完美的解决scheme,但在这里解决方法。 基本的想法是听系统的用户状态变化,强制导航/状态栏不可见。 它与设置IMMERSIVE_STICKY模式类似,但是比IMMERSIVE_STICKY更快地消除导航/状态栏。

这里是:

在onCreate()和onResume函数中设置系统UI风格,并设置系统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); 

强制系统栏在onSystemUiVisibilityChange中不可见,在几秒钟后设置系统ui,否则会起作用(不知道为什么,系统只是在系统栏显示还没有完成时忽略系统ui设置请求)

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

那么你可以这样设置系统的用户界面:

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

一个很好的解决scheme,我发现这个问题,设置每个活动themewindowSoftInputMode为以下值:

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

更多信息请参考这里 。

在之前添加这个: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);