美文网首页开发者日记Android开发Android技术知识
Android 4.2.2平板电视隐藏系统底部状态栏

Android 4.2.2平板电视隐藏系统底部状态栏

作者: IT老五 | 来源:发表于2018-12-04 22:38 被阅读4次
    Android4.2.2平板电视隐藏系统底部状态栏

    Android开发者们都在处理9.0的兼容问题了,而我今天却在折腾4.2.2平板电视的底部状态栏隐藏问题。

    前段时间帮另一个项目组同事搭的一个简易h5壳app这几天又让帮忙处理全屏问题。最初是隐藏了顶部状态栏,现在又要求隐藏底部虚拟按键。于是,唰唰唰,出现下面代码:

        /**
         * 隐藏底部虚拟按键,且全屏
         */
        private void hideBottomMenu() {
            //隐藏虚拟按键,并且全屏
            if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
                View v = this.getWindow().getDecorView();
                v.setSystemUiVisibility(View.GONE);
            } else if (Build.VERSION.SDK_INT >= 19) {
                //for new api versions.
                View decorView = getWindow().getDecorView();
                int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 
                        | View.SYSTEM_UI_FLAG_FULLSCREEN;
                decorView.setSystemUiVisibility(uiOptions);
            }
        }
    

    将其放在onCreate中,Android6.0手机上测试,一切正常,可以隐藏,唯一的不足是点击屏幕后底部虚拟按键又出现了,而且背景是透明度渐变的。于是又通过拦截touch事件,解决了点击这一问题。


    但是,将app安装到平板电视后,发现虚拟按键隐藏不了。平板电视是基于4.2.2定制的系统,于是网上找相关资料,尝试了几种,最终发现可以通过命令行代码来实现隐藏与显示。

    隐藏底部虚拟按钮
        /**
         * 关闭Android导航栏,实现全屏
         */
        private void closeBar() {
            try {
                String command;
                command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib service call activity 42 s16 com.android.systemui";
                ArrayList<String> envlist = new ArrayList<String>();
                Map<String, String> env = System.getenv();
                for (String envName : env.keySet()) {
                    envlist.add(envName + "=" + env.get(envName));
                }
                String[] envp = envlist.toArray(new String[0]);
                Process proc = Runtime.getRuntime().exec(
                        new String[] { "su", "-c", command }, envp);
                proc.waitFor();
            } catch (Exception ex) {
                e.printStackTrace();
            }
        }
    
    显示底部虚拟按钮

    由于是通过命令行su指令实现隐藏虚拟按钮,如果不主动去显示,则即使退出app,虚拟按钮仍然是隐藏的。所以,我们需要在退出app时,主动显示虚拟按钮,可以通过onDestory或者onStop或finish中调用以下方法实现。

       /**
         * 显示导航栏
         */
        public static void showBar() {
            try {
                String command;
                command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService";
                ArrayList<String> envlist = new ArrayList<String>();
                Map<String, String> env = System.getenv();
                for (String envName : env.keySet()) {
                    envlist.add(envName + "=" + env.get(envName));
                }
                String[] envp = envlist.toArray(new String[0]);
                Process proc = Runtime.getRuntime().exec(
                        new String[] { "su", "-c", command }, envp);
                proc.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    原文:简书ThinkinLiu 博客: IT老五

    以上代码可以实现4.2.2平板电视上对底部虚拟按键的隐藏与显示,再次强调下:通过该方法隐藏虚拟按键,退出app后虚拟按键是不会主动出现的,请在不需要全屏的时候或者退出app的时候主动调用显示虚拟按键。

    相关文章

      网友评论

        本文标题:Android 4.2.2平板电视隐藏系统底部状态栏

        本文链接:https://www.haomeiwen.com/subject/wzqbcqtx.html