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

itlao6 Android 原创 开发&源码评论1,048字数 2033阅读6分46秒阅读模式
Android4.2.2平板电视隐藏系统底部状态栏
Android开发者们都在处理9.0的兼容问题了,而我今天却在折腾4.2.2平板电视的底部状态栏隐藏问题。

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

    /**
     * 隐藏底部虚拟按键,且全屏
     */
    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事件,解决了点击这一问题。文章源自IT老刘-https://itlao6.com/689.html


但是,将app安装到平板电视后,发现虚拟按键隐藏不了。平板电视是基于4.2.2定制的系统,于是网上找相关资料,尝试了几种,最终发现可以通过命令行代码来实现隐藏与显示。文章源自IT老刘-https://itlao6.com/689.html

隐藏底部虚拟按钮
    /**
     * 关闭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中调用以下方法实现。文章源自IT老刘-https://itlao6.com/689.html

   /**
     * 显示导航栏
     */
    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老五文章源自IT老刘-https://itlao6.com/689.html

以上代码可以实现4.2.2平板电视上对底部虚拟按键的隐藏与显示,再次强调下:通过该方法隐藏虚拟按键,退出app后虚拟按键是不会主动出现的,请在不需要全屏的时候或者退出app的时候主动调用显示虚拟按键。文章源自IT老刘-https://itlao6.com/689.html 文章源自IT老刘-https://itlao6.com/689.html

继续阅读
weinxin
我的微信公众号
微信扫一扫关注公众号,不定时更新
itlao6
  • 本文由 发表于 2018年 12月 4日 22:46:38
  • 转载请务必保留本文链接:https://itlao6.com/689.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定