永久隐藏Android状态栏

时间:2014-01-27 01:53:41

标签: android root android-4.4-kitkat

我正在尝试在Android 4.4设备上隐藏系统状态栏。这适用于自助服务终端模式,我的应用程序将成为设备上唯一运行的应用程序。目前的目标设备是2013 Nexus 7。

的装置是植根,我已经能够完全除去底部导航栏与来自一些信息this post

对于顶级状态栏,我尝试过的所有内容都只是暂时隐藏了该栏。如果我的用户在屏幕顶部向下移动,状态栏会重新出现。我不想让他们看到时间,进行设置甚至看到通知。

我发现的帖子已经尝试过了:

有什么建议吗?

在理想情况下,我很想能够编辑build.prop要做到这一点,因为我已经在做,对于导航栏,并能同时做到这一点。我正在尝试不必构建自己的android映像。

更新

经过一些工作,这似乎在某种程度上取决于android的确切构建,或者它运行的设备。

某些设备,例如我一直在使用的Nexus系列,允许用户滑动以重新显示该条。

不过,我最近想这对Verizon的Eclipse和酒吧没有再出现,这正是我所期待的。

我仍在寻找一种更好的解决方案来定位所有设备,但它可能会归结为创建我自己的android版本。

8 个答案:

答案 0 :(得分:30)

我们无法阻止在kitkat设备中以全屏模式显示状态,因此制作了一个仍然符合要求的黑客攻击,即阻止状态栏扩展。

为此,该应用程序未全屏显示。我们在状态栏上放置了一个叠加层并消耗了所有输入事件。它阻止了地位的扩大。

<强> 注意:

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

<强>更新

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

customViewGroup implementation 代码:

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

希望这有助于你

答案 1 :(得分:19)

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

禁用:

service call activity 42 s16 com.android.systemui

启用:

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

答案 2 :(得分:18)

我确实尝试过@gonglong提供的解决方法,但我对结果感到不满意,因为随着解决方法的推出,用户界面出现了闪光。

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

settings put secure user_setup_complete 0

我认为在普通设备上,这会导致初始设备设置启动,但在我的设备上,我已从系统中移除了该APK,因此无法实现。

在我找不到的任何地方都没有记录,但效果很好,顶级设置界面无法被拖放。通知区域仍然可以拖放。

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

settings put global device_provisioned 0

这会隐藏Power菜单中的飞行模式和静音模式选项,这对我的应用程序来说是一个额外的好处。

可能会有更多的副作用,但我还没有发现任何重要的事情。

完整列表

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

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

注意:某些URL需要添加额外的空格字符以绕过SO过滤器

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]
  • 铃声[content:// media / internal / audio / media / 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 [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_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 [us]

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]
  • 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] < / LI>
  • 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] < / LI>
  • bluetooth_name [Nexus 7]
  • masterLocationPackagePrefixBlacklist [com.google。,com.semaphoremobile.zagat.android]
  • serial_blacklist [827,864]
  • dropbox:data_app_anr [disabled]
  • dropbox:data_app_wtf [disabled]
  • ssl_session_cache [file]
  • pubkey_blacklist [5f3ab33d55007054bc5e3e5553cd8d8465d77c61,783333c9687df63377efceddd82efa9101913e8e]
  • facelock_liveliness_recognition_threshold [2.2]
  • facelock_detection_threshold [0.0]
  • dropbox:data_app_crash [disabled]
  • 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,network]
  • allowed_geolocation_origins [http://www.google.co.uk http:// www.google.com]
  • locationPackagePrefixBlacklist []
  • user_setup_complete [1]
  • locationPackagePrefixWhitelist []
  • last_setup_shown [eclair_1]

答案 3 :(得分:4)

我用这个答案来隐藏软键:https://stackoverflow.com/a/27003890/1525867

用于禁用状态栏(这可能会损坏您的设备,因此请在执行此操作之前多次破坏我的设备)在华硕Tinker Board,Android 6上进行测试:

  • 从这里下载apktool https://bitbucket.org/iBotPeaches/apktool/downloads/并以您最喜欢的方式将其添加到path
  • 从您的设备中提取SystemUI.apkadb pull /system/priv-app/SystemUI/SystemUI.apk SystemUI.apk的路径可能不同

  • 从您的设备framework-res.apkadb pull /system/framework/framework-res.apk framework-res.apk的路径可能不同

  • 运行apktool if framework-res.apk

  • 运行apktool if SystemUI.apk

  • 运行apktool d SystemUI.apk

  • 打开SystemUI\res\layout\status_bar.xml并将android:visibility="gone"添加到最顶层的xml元素(对我来说是com.android.systemui.statusbar.phone.PhoneStatusBarView

  • 运行apktool b SystemUI

  • 转到SystemUI\original并将AndroidManifest.xmlMETA-INF复制到SystemUI\build\apk\

  • 再次运行apktool b SystemUI

  • 转到SystemUI\dist\并使用SystemUI.apk SystemUI\dist\SystemUI.apk

  • 覆盖设备的原始adb push SystemUI\dist\SystemUI.apk /system/priv-app/SystemUI/SystemUI.apk
  • 重启设备

基于此帖子https://forum.xda-developers.com/showthread.php?t=2203166

答案 4 :(得分:2)

我没有完美的解决方案,但这里有一个解决方法。基本思路是监听系统ui状态变化并强制导航/状态栏不可见。它的效果与设置IMMERSIVE_STICKY模式类似,但导航/状态栏的消失速度比IMMERSIVE_STICKY快。

这里是:

在onCreate()和onResume函数中设置系统ui样式,并设置system ui change listener

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


    }
}

然后你可以像这样设置系统ui:

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

答案 5 :(得分:2)

我为该问题找到了一个很好的解决方案,设置了每个活动theme&amp; windowSoftInputMode以下值:

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

了解更多信息refer here

答案 6 :(得分:0)

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

答案 7 :(得分:0)

尝试此代码:

禁用状态栏和导航栏

adb shell
su 
pm disable com.android.systemui
reboot

启用状态栏和导航栏

adb shell
su 
pm enable com.android.systemui
reboot

它可在Android 5.1.1上运行,但USB摄像头已关闭