目前市面上大多数的手机都是全面屏+虚拟按键,很少有实体按键的手机了,但是不排除有的可能,这不活来了啊

顾不上思考了,开车!分两步走,移除虚拟按键,配置实体菜单键的功能

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去除虚拟按键并修改实体菜单键为换起最近任务相关推荐

  1. android dialog隐藏虚拟按键,Android应用开发之Android dialog 去除虚拟按键的解决方法...

    本文将带你了解Android应用开发Android dialog 去除虚拟按键的解决方法,希望本文对大家学Android有所帮助. Android   部分机型没有物理按键,只有虚拟按键,Activi ...

  2. Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数

    Mtk平台 Android 打包解包*.img ,修改system.img 参数 MTK 升级包文件如下: 若存在软件版本号存在错误或需要修改,重新编译则需要几个小时,或者要几天的测试 若可以直接修改 ...

  3. MTK平台Android 安全中secure boot机制

    一.相关名词解释 1.公钥:通俗来说,公钥就是公开的密钥,是私钥拥有者公开的,公钥通常用于加密会话密钥.验证数字签名,或加密可以用相应的私钥解密的数据. 2.私钥:私有的钥匙,不会公开,私钥加密又称为 ...

  4. android 遥控器映射,MTK 平台Android系统遥控器映射关系

    MTK 平台Android系统遥控器映射关系 在我们工作中,经常要去适配遥控器的工作,但是大部时候我们是移植其他工程上的代码来修改,可能对Android系统中的按键关系有些不清楚,下面以MTK平台为例 ...

  5. android系统触摸屏虚拟按键

     (一)虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual  ...

  6. 隐藏Android下的虚拟按键

    隐藏Android下的虚拟按键 要隐藏Android下的虚拟按键,可通过如下办法操作 [cpp] view plaincopy adb root adb remount adb shell ls -a ...

  7. android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解

    Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...

  8. 如何隐藏Android模拟器的虚拟按键

    如何隐藏Android模拟器的虚拟按键 在我们做屏幕适配的时候,就务必需要使用模拟器进行适配.但是在编辑的过程中,总是发现令人恶心的黑不溜秋的虚拟按键,很影响我们进行屏幕适配,如下图: 那么如何才能如 ...

  9. 安卓去除虚拟按键(home键,返回键,列表键)

    系统5.1  相关文章: 安卓添加虚拟按键 1.修改以下两个文件中home和recent_app的visibility属性为gone(属性为隐藏) frameworks/base/packages/S ...

最新文章

  1. shell 获取命令执行结果_java高并发系列 第31天:获取线程执行结果,这6种方法你都知道?...
  2. C++学习之路 | PTA乙级—— 1087 有多少不同的值 (20 分)(精简)
  3. 配置babel_Babel 7 下配置 TypeScript 支持
  4. 判断用户 小程序_【重要声明】小程序维护中,iphone用户手机暂时用不了小程序...
  5. 海量个人信息被泄漏 央视首次曝光智能呼叫机器人
  6. python的符号函数得到的数字类型_python-1:Number数字类型 之二 相关函数 int.from_bytes,int.to_bytes()...
  7. java的mwcellarray_Java 数组
  8. sqlserver 2008r2 查看表结构及视图、版本及数据类型(字段)
  9. 用SHELL脚本自动化安装Nagios服务器端和客户端的
  10. Java程序员要求具备的10项技能
  11. 计算机算法设计与分析第三章答案,《计算机算法设计与分析》第三章动态规划法.ppt...
  12. Python基于协同过滤算法的电影推荐系统设计与实现
  13. 语法分析:自下而上分析
  14. pyodbc 操作SQL Server数据库
  15. 三极管分压共射放大电路
  16. java 获取某一日期的0点0分0秒和23点59分59秒
  17. 【USB】USB的VID和PID
  18. 《Cocos Creator游戏实战》实现微信小游戏的截图,预览和相册保存功能
  19. android平板的隐藏空间如何开启,平板电脑怎么截图和怎么隐藏游戏?
  20. 在电路中,耦合是什么?有哪些方式?

热门文章

  1. 铁路辅警的认识            灵宝西站派出所第一警务区 高飞
  2. 语音信号之基础知识(一)
  3. Google在线的Python神器colab
  4. Makefile里面的$(MAKE)到底是啥
  5. 互联网摸鱼日报(2022-11-27)
  6. 同一天出现三款社交类app宣战微信 马桶MT首战便被封杀
  7. 如何使用原理图(涵盖器件符号、51举例)
  8. ReentrantLock加锁(lock())、释放锁(unlock())的实现
  9. 定义QQ气泡diy接口
  10. 封装element中的table表格动态渲染(动态表头,可操控列)