安卓11adb控制按键Home和Back和电源短按键的禁用和启用 | 您所在的位置:网站首页 › 小米手机home键在哪里关闭 › 安卓11adb控制按键Home和Back和电源短按键的禁用和启用 |
启用和禁用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,在搜索中 路径 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命令窗口中,通过 back和电源短按键可以用同等方式去控制 |
CopyRight 2018-2019 实验室设备网 版权所有 |