Mr.Alright---MTK平台Android Q去除虚拟按键并修改实体菜单键为换起最近任务
目前市面上大多数的手机都是全面屏+虚拟按键,很少有实体按键的手机了,但是不排除有的可能,这不活来了啊
顾不上思考了,开车!分两步走,移除虚拟按键,配置实体菜单键的功能
1.移除虚拟按键
修改项目中的Y:\11\alps\device\xxx\project_name\system.prop # temporary enables NAV bar (soft keys) qemu.hw.mainkeys=0 0是显示 1是移除
但是 如果你发现编译出来的值还是0,那么说明是项目中的prop值没有复写成功,为什么没成功呢?
因为在alps/device/mediatek/system/common/BoardConfig.mk中,mtk默认走的是device/mediatek/system/common/system.prop,而不是我们项目中的,所以需要修改下逻辑,修改成下面走我们项目的文件,这样设置1就可以了
修改前
#TARGET_SYSTEM_PROP += device/mediatek/system/common/system.prop修改后
ifneq ($(wildcard device/maisui/$(MTK_TARGET_PROJECT)/system.prop),)TARGET_SYSTEM_PROP += device/maisui/$(MTK_TARGET_PROJECT)/system.prop
elseTARGET_SYSTEM_PROP += device/mediatek/system/common/system.prop
endif
2.配置实体菜单键的功能
虚拟按键和实体键的点击事件都是走的alps\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java,但是Q开始google添加了全屏手势之后,菜单键的事件被systemUI拦截并处理了,但是实体键的并不会被拦截,所以依然在这里面处理
import android.hardware.input.InputManager;private long MenukeyDownTime;private boolean isLongMenuPressed = false;public static final int FLAG_ORIGINAL_KEY = 0x1000;public void sendDispatchEvent(int action, int flags, long when, int keycode) {final int repeatCount = (flags & KeyEvent.FLAG_LONG_PRESS) != 0 ? 1 : 0;final KeyEvent ev = new KeyEvent(SystemClock.uptimeMillis(), when, action, keycode, repeatCount,0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,flags | KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY,InputDevice.SOURCE_KEYBOARD);InputManager.getInstance().injectInputEvent(ev,InputManager.INJECT_INPUT_EVENT_MODE_ASYNC);}private Runnable mMenukeyLongPressed = new Runnable(){public void run(){isLongMenuPressed = true;//dispatch original key (menu)sendDispatchEvent(KeyEvent.ACTION_DOWN, FLAG_ORIGINAL_KEY,SystemClock.uptimeMillis(),KeyEvent.KEYCODE_MENU);sendDispatchEvent(KeyEvent.ACTION_UP, FLAG_ORIGINAL_KEY,SystemClock.uptimeMillis(),KeyEvent.KEYCODE_MENU);}};private long interceptKeyBeforeDispatchingInner(WindowState win, KeyEvent event,int policyFlags) {.......else if (keyCode == KeyEvent.KEYCODE_MENU) {// add startif (!keyguardOn && ((event.getFlags() & FLAG_ORIGINAL_KEY) == 0)) {if (repeatCount == 0) {if (down) {preloadRecentApps();isLongMenuPressed = false;MenukeyDownTime = SystemClock.uptimeMillis();mHandler.removeCallbacks(mMenukeyLongPressed);mHandler.postDelayed(mMenukeyLongPressed, 1000);return -1;} else if (!down) {mHandler.removeCallbacks(mMenukeyLongPressed);if (SystemClock.uptimeMillis() - MenukeyDownTime > 1000) {return -1;} else {toggleRecentApps();return -1;}}} else {if (down) {if (isLongMenuPressed) {isLongMenuPressed = false;return -1;} else {return -1;}} else {return -1;}}} // add end}}
而后长按home键唤醒google语音助手alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@Overridepublic void start() {....// start old BaseStatusBar.start().mWindowManagerService = WindowManagerGlobal.getWindowManagerService();//add starttry {if (!mWindowManagerService.hasNavigationBar(mDisplayId) && mAssistManager != null) {mAssistManager.onConfigurationChanged(mContext.getResources().getConfiguration());}} catch (RemoteException e) {// Cannot get wms, just return with warning message.Log.w(TAG, "Cannot get WindowManager.");}//add endmDevicePolicyManager = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);mAccessibilityManager = (AccessibilityManager)mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
}
这样功能就完成了。
Mr.Alright---MTK平台Android Q去除虚拟按键并修改实体菜单键为换起最近任务相关推荐
- android dialog隐藏虚拟按键,Android应用开发之Android dialog 去除虚拟按键的解决方法...
本文将带你了解Android应用开发Android dialog 去除虚拟按键的解决方法,希望本文对大家学Android有所帮助. Android 部分机型没有物理按键,只有虚拟按键,Activi ...
- Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数
Mtk平台 Android 打包解包*.img ,修改system.img 参数 MTK 升级包文件如下: 若存在软件版本号存在错误或需要修改,重新编译则需要几个小时,或者要几天的测试 若可以直接修改 ...
- MTK平台Android 安全中secure boot机制
一.相关名词解释 1.公钥:通俗来说,公钥就是公开的密钥,是私钥拥有者公开的,公钥通常用于加密会话密钥.验证数字签名,或加密可以用相应的私钥解密的数据. 2.私钥:私有的钥匙,不会公开,私钥加密又称为 ...
- android 遥控器映射,MTK 平台Android系统遥控器映射关系
MTK 平台Android系统遥控器映射关系 在我们工作中,经常要去适配遥控器的工作,但是大部时候我们是移植其他工程上的代码来修改,可能对Android系统中的按键关系有些不清楚,下面以MTK平台为例 ...
- android系统触摸屏虚拟按键
(一)虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual ...
- 隐藏Android下的虚拟按键
隐藏Android下的虚拟按键 要隐藏Android下的虚拟按键,可通过如下办法操作 [cpp] view plaincopy adb root adb remount adb shell ls -a ...
- android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解
Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...
- 如何隐藏Android模拟器的虚拟按键
如何隐藏Android模拟器的虚拟按键 在我们做屏幕适配的时候,就务必需要使用模拟器进行适配.但是在编辑的过程中,总是发现令人恶心的黑不溜秋的虚拟按键,很影响我们进行屏幕适配,如下图: 那么如何才能如 ...
- 安卓去除虚拟按键(home键,返回键,列表键)
系统5.1 相关文章: 安卓添加虚拟按键 1.修改以下两个文件中home和recent_app的visibility属性为gone(属性为隐藏) frameworks/base/packages/S ...
最新文章
- shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...
- C++学习之路 | PTA乙级—— 1087 有多少不同的值 (20 分)(精简)
- 配置babel_Babel 7 下配置 TypeScript 支持
- 判断用户 小程序_【重要声明】小程序维护中,iphone用户手机暂时用不了小程序...
- 海量个人信息被泄漏 央视首次曝光智能呼叫机器人
- python的符号函数得到的数字类型_python-1:Number数字类型 之二 相关函数 int.from_bytes,int.to_bytes()...
- java的mwcellarray_Java 数组
- sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
- 用SHELL脚本自动化安装Nagios服务器端和客户端的
- Java程序员要求具备的10项技能
- 计算机算法设计与分析第三章答案,《计算机算法设计与分析》第三章动态规划法.ppt...
- Python基于协同过滤算法的电影推荐系统设计与实现
- 语法分析:自下而上分析
- pyodbc 操作SQL Server数据库
- 三极管分压共射放大电路
- java 获取某一日期的0点0分0秒和23点59分59秒
- 【USB】USB的VID和PID
- 《Cocos Creator游戏实战》实现微信小游戏的截图,预览和相册保存功能
- android平板的隐藏空间如何开启,平板电脑怎么截图和怎么隐藏游戏?
- 在电路中,耦合是什么?有哪些方式?