如何在 AOSP 13 中映射另一个键码以进行后退导航?

问题描述 投票:0回答:1

我正在使用 AOSP 13 源代码。

  • 通过 adb shell 返回

adb shell input keyevent 4

4 是返回键代码

我想通过键码141映射返回导航,这样我就可以使用上面的命令返回

adb shell input keyevent 141

这可能吗?

android android-source android-framelayout
1个回答
0
投票

我找到了解决办法。

  • 由于键码 141 映射到 Frameworks/base/core/java/android/view/KeyEvent.java 中的 KEYCODE_F11

  • 需要在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java中处理KEYCODE_F11的输入事件

  • 导入文件

import android.content.Context;
import android.os.SystemClock;
import android.view.InputEvent;
import android.view.KeyEvent;
import com.android.server.LocalServices;
import com.android.server.input.InputManagerService;
import android.hardware.input.InputManager;
  • 在函数interceptKeyBeforeQueueing()中,有一个switch case添加了KEYCODE_F11的case。

// Handle special keys.
         switch (keyCode) {
+           case KeyEvent.KEYCODE_F11:
+               long now = SystemClock.uptimeMillis();
+               if (down)
+               {
+                       // Inject a key down event
+                       KeyEvent downEvent = new KeyEvent(now, now, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, 0);
+                       InputManager.getInstance().injectInputEvent(downEvent, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+               }
+               else
+               {
+                       // inject a key up event
+                       KeyEvent upEvent = new KeyEvent(now, now, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK, 0);
+                       InputManager.getInstance().injectInputEvent(upEvent, InputManager.INJECT_INPUT_EVENT_MODE_WAIT_FOR_FINISH);
+               }
+               break;
             case KeyEvent.KEYCODE_BACK: {
                 if (down) {
                     mBackKeyHandled = false;

© www.soinside.com 2019 - 2024. All rights reserved.