• Android开发关闭虚拟按钮、底部导航条


       在Android开发中,遇到了一系列大大小小的问题,其中一个就是屏蔽底部实体键,我找了很多的博客也尝试了许许多多的方法,但始终不能屏蔽 HOME键,后来看见一篇博客说在Android 4.0以后,屏蔽底部HOME键必须反编译,修改Android底部原生代码,于是我便放弃了。废话不多说,我先分享一个屏蔽Android虚拟按键的方法,以及最简单的屏蔽Android的Back按钮,适合所有版本(未测试,感觉是这样):

    1. Android 屏蔽Back按键

      只需要重写 onKeyDown 方法就可以了,代码如下:

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                Toast.makeText(MainActivity.this, "·µ»Ø¼üÒѱ»½ûÓÃ...", Toast.LENGTH_SHORT)
                        .show();
                return true; // return true 和 false 我都试过,都能屏蔽,原因还未知,希望知道的可以告诉我一下,谢谢
            }return super.onKeyDown(keyCode, event);
        }

    2. Android 隐藏虚拟导航条(需要系统权限)

      需要在 AndroidManifest.xml 中加入以下权限:

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

      然后是关闭底部导航条的代码,我封装成了一个类,只需要在 onCreate 方法里调用该方法就行,该类如下:

    package com.jd.nanapptwo.utils;
    
    import android.os.Build;
    
    /**
     * 关闭显示导航条
     */
    public class CloseBarUtil {
    
        /**
         * 关闭底部导航条
         */
        public static void closeBar() {
            try {
                // 需要root 权限
                Build.VERSION_CODES vc = new Build.VERSION_CODES();
                Build.VERSION vr = new Build.VERSION();
                String ProcID = "79";
                if (vr.SDK_INT >= vc.ICE_CREAM_SANDWICH) {
                    ProcID = "42"; // ICS AND NEWER
                }
                // 需要root 权限
                Process proc = Runtime.getRuntime().exec(
                        new String[]{
                                "su",
                                "-c",
                                "service call activity " + ProcID
                                        + " s16 com.android.systemui"}); // WAS 79
                proc.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 显示底部导航条
         */
        public static void showBar() {
            try {
                Process proc = Runtime.getRuntime().exec(
                        new String[]{"am", "startservice", "-n",
                                "com.android.systemui/.SystemUIService"});
                proc.waitFor();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    希望以上方法会对你们有帮助。

  • 相关阅读:
    C#与数据库访问技术总结(三)之 Connection对象的常用方法
    ConnectionState详解
    SQL Server 中 RAISERROR 的用法
    C# 捕获数据库自定义异常
    "在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke"
    查询sql语句的执行时间
    c# 多线程 创建对象实例
    C#中IDisposable的用法-垃圾回收
    c#中的引用类型和值类型
    C++运行出现"what(): std::bad_alloc"的解决办法
  • 原文地址:https://www.cnblogs.com/yjq520/p/7243713.html
Copyright © 2020-2023  润新知