安卓11adb控制按键Home和Back和电源短按键的禁用和启用 您所在的位置:网站首页 小米手机home键在哪里关闭 安卓11adb控制按键Home和Back和电源短按键的禁用和启用

安卓11adb控制按键Home和Back和电源短按键的禁用和启用

2024-07-16 09:24| 来源: 网络整理| 查看: 265

启用和禁用Home和Back和电源短按键 用什么方法?

如果是按钮的话可以直接拿到enable属性或clickable属性去控制,但安卓11中并没有直接地方拿到按键,而拿到的是ButtonDispatcher,亲测无法直接使用setEnabled()方法,会直接编译报错,如果使用setClickable()又不生效。所以直接通过属性控制是不行的。 那么,就应该考虑按下键位时做了什么事情,想办法拦截下事件。

按键对应keyCode

在keyEvent.java中,有一些按键对应着keyCode,而当keyCode=0时,代表未知的密钥,通过控制keyEvent里面的keyCode,让其返回0,使其按键的事件被系统认定为未知,这样就能把事件拦截下来。 关于路径:

frameworks\base\core\java\android\view\KeyEvent.java 在哪里控制? base\services\core\java\com\android\server\policy\PhoneWindowManager.java

在PhoneWindowManager.java搜索你需要启用或禁用按键对应的keyCode,一般的写法是KeyEvent.KEYCODE_XXX,而这个值是在KeyEvent.java中被定义好的,比如说KeyEvent.KEYCODE_HOME,在搜索中 在这里插入图片描述 这是一个选择语句,我们只要在adb中写入一个值或发送广播之类的,以此多套一层选择语句,让其做为返回0的条件,便可以控制按键的点击事件或触摸长按事件之类的,使其显示状态却不对事件回应。

举个例子----禁用Home按键 找到home按键对应的keyCode /** Key code constant: Home key. * This key is handled by the framework and is never delivered to applications. */ public static final int KEYCODE_HOME = 3; 找到处理home键对应keyCode的地方

路径

base\services\core\java\com\android\server\policy\PhoneWindowManager.java // First we always handle the home key here, so applications // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { DisplayHomeButtonHandler handler = mDisplayHomeButtonHandlers.get(displayId); if (handler == null) { handler = new DisplayHomeButtonHandler(displayId); mDisplayHomeButtonHandlers.put(displayId, handler); } return handler.handleHomeButton(focusedToken, event); } 修改方法

这里我采用向系统数据库写入值得方法去控制 首先在数据库中加入我们需要的值的字段 路径:

vendor\mediatek\proprietary\packages\apps\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java

这个路径只要找SettingsProvider下的DatabaseHelper.java类就好了,因为不同公司的集成路径的叫法不同。 这里要做的就是向settings数据库中三个表之一,写入一个字段并附上对应默认值即可。 如果在loadSystemSettings(SQLiteDatabase db)方法中写入,则是在system表中添加了字段,注意,在写入值时,要与你输入adb命令put值的表对应,否则无效

loadIntegerSetting(stmt,"home_button",R.integer.def_home_button);

这里加入的是一个i整形引用类型的值,需要在此项目的同级目录下中的default.xml中添加好对应的值

0

回到PhoneWindowManager.java中,则有

// First we always handle the home key here, so applications // can never break it, although if keyguard is on, we do let // it handle it, because that gives us the correct 5 second // timeout. if (keyCode == KeyEvent.KEYCODE_HOME) { if(Settings.System.getInt(mContext.getContentResolver(), "home_button", 0) ==1){ return 0; } DisplayHomeButtonHandler handler = mDisplayHomeButtonHandlers.get(displayId); if (handler == null) { handler = new DisplayHomeButtonHandler(displayId); mDisplayHomeButtonHandlers.put(displayId, handler); } return handler.handleHomeButton(focusedToken, event); }

这里是采用向settings数据库中的system表中写入值来控制home按键的启用和禁用

做好这些后就可以刷机了。

测试方法

在adb命令窗口中,通过 在这里插入图片描述 这里我们可以查看system表中的home_button值为0 而代码中我们让home_button值为1时,keyCode返回0 在这里插入图片描述 这样我们就修改了home_button的值为1,此刻home按键是失效的。

back和电源短按键可以用同等方式去控制



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有