From 7f54df55cdd4c9cc524869aba16fea215391b9f0 Mon Sep 17 00:00:00 2001 From: jiangyitao <451988022@163.com> Date: Mon, 28 Dec 2020 18:00:13 +0800 Subject: [PATCH] keycode --- .../core/mobile/android/scrcpy/Scrcpy.java | 26 +++++++++++-------- .../websocket/AndroidScrcpySocketServer.java | 11 +++++++- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java b/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java index 2aa66a3..4bd44ec 100644 --- a/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java +++ b/src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java @@ -263,22 +263,26 @@ private void commitTouchEvent(byte actionType, int x, int y, int screenWidth, in private static final byte KEY_EVENT_ACTION_DOWN = 0; private static final byte KEY_EVENT_ACTION_UP = 1; - private static final byte TYPE_INJECT_KEYCODE = 0; - private ByteBuffer keycodeBuffer = ByteBuffer.allocate(20); // Scrcpy.server ControlMessageReader.parseInjectKeycode - public void commitKeycode(int keycode) { - keycodeBuffer.rewind(); + public void keyDown(int keycode, int metaState) { + commitKeycode(keycode, metaState, KEY_EVENT_ACTION_DOWN); + } - keycodeBuffer.put(TYPE_INJECT_KEYCODE); - keycodeBuffer.put(KEY_EVENT_ACTION_DOWN); // 按下 - keycodeBuffer.putInt(keycode); // keycode - keycodeBuffer.putInt(0); // metaState + public void keyUp(int keycode, int metaState) { + commitKeycode(keycode, metaState, KEY_EVENT_ACTION_UP); + } + + private static final byte TYPE_INJECT_KEYCODE = 0; + private ByteBuffer keycodeBuffer = ByteBuffer.allocate(10); + + private void commitKeycode(int keycode, int metaState, byte keyDownOrUp) { + keycodeBuffer.rewind(); keycodeBuffer.put(TYPE_INJECT_KEYCODE); - keycodeBuffer.put(KEY_EVENT_ACTION_UP); // 抬起 - keycodeBuffer.putInt(keycode); // keycode - keycodeBuffer.putInt(0); // metaState + keycodeBuffer.put(keyDownOrUp); + keycodeBuffer.putInt(keycode); + keycodeBuffer.putInt(metaState); commit(keycodeBuffer.array()); } diff --git a/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java b/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java index 04eb30e..8e7e68d 100644 --- a/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java +++ b/src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java @@ -69,7 +69,16 @@ public void onMessage(String msg) { scrcpy.touchUp(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height")); break; case "k": - scrcpy.commitKeycode(message.getIntValue("keycode")); + int keycode = message.getIntValue("keycode"); + int metaState = message.getIntValue("metaState"); + scrcpy.keyDown(keycode, metaState); + scrcpy.keyUp(keycode, metaState); + break; + case "kd": + scrcpy.keyDown(message.getIntValue("keycode"), message.getIntValue("metaState")); + break; + case "ku": + scrcpy.keyUp(message.getIntValue("keycode"), message.getIntValue("metaState")); break; } }