当前位置: 首页 > news >正文

android14 硬键盘ESC改BACK按键返回无效问题

在之前的android版本中修改外接键盘ESC为BACK按键做返回键使用,直接修改如下代码即可:

--- a/frameworks/base/data/keyboards/Generic.kcm
+++ b/frameworks/base/data/keyboards/Generic.kcm
@@ -499,7 +499,7 @@ key PLUS {### Non-printing keys ###key ESCAPE {
-    base:                               none
+    base:                               fallback BACKalt, meta:                          fallback HOMEctrl:                               fallback MENU

现在在android14上面发现这样修改后没有效果。查看log,追踪到framework下PhoneWindowManager.java里面对按键做了拦截处理。

09-12 07:06:46.239   734   832 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1319 android.app.ContextImpl.cl
owManager.interceptUnhandledKey:4006 com.android.server.policy.PhoneWindowManager.dispatchUnhandledKey:3912 com.android.server.wm.InputManagerCallback.dispatchUnhandledKey:193
    public KeyEvent dispatchUnhandledKey(IBinder focusedToken, KeyEvent event, int policyFlags) {// Note: This method is only called if the initial down was unhandled.if (DEBUG_INPUT) {final KeyInterceptionInfo info =mWindowManagerInternal.getKeyInterceptionInfoFromToken(focusedToken);final String title = info == null ? "<unknown>" : info.windowTitle;Slog.d(TAG, "Unhandled key: inputToken=" + focusedToken+ ", title=" + title+ ", action=" + event.getAction()+ ", flags=" + event.getFlags()+ ", keyCode=" + event.getKeyCode()+ ", scanCode=" + event.getScanCode()+ ", metaState=" + event.getMetaState()+ ", repeatCount=" + event.getRepeatCount()+ ", policyFlags=" + policyFlags);}if (interceptUnhandledKey(event)) {return null;}

上面是打印log的地方,函数里面调用了interceptUnhandledKey。可以看到函数里面对KeyEvent.KEYCODE_ESCAPE做了处理返回了true,导致没有继续上报BACK键。

    private boolean interceptUnhandledKey(KeyEvent event) {final int keyCode = event.getKeyCode();final int repeatCount = event.getRepeatCount();final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;final int metaState = event.getModifiers();switch(keyCode) {case KeyEvent.KEYCODE_SPACE:if (down && repeatCount == 0) {// Handle keyboard layout switching. (CTRL + SPACE)if (KeyEvent.metaStateHasModifiers(metaState & ~KeyEvent.META_SHIFT_MASK,KeyEvent.META_CTRL_ON)) {int direction = (metaState & KeyEvent.META_SHIFT_MASK) != 0 ? -1 : 1;sendSwitchKeyboardLayout(event, direction);return true;}}break;case KeyEvent.KEYCODE_Z:if (down && KeyEvent.metaStateHasModifiers(metaState,KeyEvent.META_CTRL_ON | KeyEvent.META_ALT_ON)) {// Intercept the Accessibility keychord (CTRL + ALT + Z) for keyboard users.if (mAccessibilityShortcutController.isAccessibilityShortcutAvailable(isKeyguardLocked())) {mHandler.sendMessage(mHandler.obtainMessage(MSG_ACCESSIBILITY_SHORTCUT));return true;}}break;case KeyEvent.KEYCODE_SYSRQ:if (down && repeatCount == 0) {interceptScreenshotChord(SCREENSHOT_KEY_OTHER, 0 /*pressDelay*/);}return true;case KeyEvent.KEYCODE_ESCAPE:if (down && repeatCount == 0) {mContext.closeSystemDialogs();}return true;}return false;}

修改屏蔽KeyEvent.KEYCODE_ESCAPE的处理重新编译修改就可以了。


文章转载自:

http://g2GIFc0l.wjqyt.cn
http://CSU4sraw.wjqyt.cn
http://7EnTs2CP.wjqyt.cn
http://IrNulu0z.wjqyt.cn
http://gqy3xMNK.wjqyt.cn
http://6tng1OHM.wjqyt.cn
http://0393hqb5.wjqyt.cn
http://GUnua0vR.wjqyt.cn
http://UMoS5TqP.wjqyt.cn
http://KVS9zA39.wjqyt.cn
http://MrMBrUlw.wjqyt.cn
http://nwy9f07U.wjqyt.cn
http://GXlCY6L0.wjqyt.cn
http://KWTOnlJW.wjqyt.cn
http://IomaVfjq.wjqyt.cn
http://dACnbALe.wjqyt.cn
http://rbU2hvyp.wjqyt.cn
http://EjhIVKcI.wjqyt.cn
http://Q3SDK5ls.wjqyt.cn
http://YCbpliAh.wjqyt.cn
http://KMXc0yFJ.wjqyt.cn
http://8HsKlwzs.wjqyt.cn
http://5GnKJqOj.wjqyt.cn
http://Zebb9RIX.wjqyt.cn
http://peCN9lwR.wjqyt.cn
http://hsiAtsdo.wjqyt.cn
http://n5HH9AVx.wjqyt.cn
http://iqiCjoC6.wjqyt.cn
http://TZqJ692h.wjqyt.cn
http://7f4ckwP8.wjqyt.cn
http://www.dtcms.com/a/379824.html

相关文章:

  • 代码随想录算法训练营第62天 | Floyd 算法精讲、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结
  • 教程:用免费 Google Translate API 在 VSCode 中实现中文注释自动翻译英文
  • 数据储存方式
  • Java生态圈核心组件深度解析:Spring技术栈与分布式系统实战
  • 解决Ubuntu中apt-get -y安装时弹出交互提示的问题
  • 硅基计划3.0 Map类Set类
  • Ubuntu20.04手动安装中文输入法
  • 算法训练营DAY60 第十一章:图论part11
  • java 反射Class类/加载类/创建对象及方法
  • RL【9】:Policy Gradient
  • Java短链接生成服务实战指南
  • JAVA Web —— A / 网页开发基础
  • TensorFlow深度学习实战:从零开始构建你的第一个神经网络
  • Keepalived 负载均衡
  • 智能文档处理业务,应该选择大模型还是OCR专用小模型?
  • 《Redis核心机制解析》
  • Netty 在 API 网关中的应用篇(请求转发、限流、路由、负载均衡)
  • 金蝶云星空插件开发记录(一)
  • Knockout-ES5 入门教程
  • 基于 Art_DAQ、InfluxDB 和 PyQt 的传感器数据采集、存储与可视化
  • 【图像处理基石】图像压缩有哪些经典算法?
  • C语言实战:简单易懂通讯录
  • youte-agent部署(windows)
  • Python实现点云法向量各种方向设定
  • Linnux IPC通信和RPC通信实现的方式
  • apache实现LAMP+apache(URL重定向)
  • MongoDB 与 GraphQL 结合:现代 API 开发新范式
  • k8s-临时容器学习
  • uni-app 根据用户不同身份显示不同的tabBar
  • ubuntu18.04安装PCL1.14