scrcpy 实现全选功能ctrl+a 输入法

背景

之前实现输入法功能,然后去android keyevent文档上找是否这样子,结果毛都没有,然后看scrcpy上面也没有看到单独一个函数是实现全选,后面想了好久是不是就是实现ctrl+a 这个按键呢?后面果然发现确实是这样子

知识点

在scrcpy 他实现按键时候传递metaState 这个属性值,我自己没有实现,然后看了一个关键词 AMETA_CTRL_LEFT_ON,然后搜索到这个对应值,所以只要模拟A时候设置一下metaState

PC代码

bool WindowsUI::HandleSelectAll(const SDL_KeyboardEvent& ev)
{
    if (ev.keysym.sym == SDLK_a && (ev.keysym.mod & KMOD_LCTRL) == KMOD_LCTRL) {
        //a + ctrl
        //AMETA_CTRL_LEFT_ON 0x2000
        m_contronl_net->SendKeyEvent(29, 0x2000);        //全选
        return true;
    }
    return false;
}

android 代码

    private void handleKeyCodeMessage(JSONObject data) throws JSONException{
        int key_code = data.getInt("key_code");
        int meta_state = data.getInt("mode");
        actionImplement.keyEvent(key_code, meta_state, false);
    }

        private void sendKeyEvent(int inputSource, int keyCode, int meteState, boolean longpress) {
        long now = SystemClock.uptimeMillis();

        EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 0, meteState,
                KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, inputSource));
        if (longpress) {
            EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_DOWN, keyCode, 1, meteState,
                    KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_LONG_PRESS,
                    inputSource));
        }

        EventFactory.injectKeyEventSelf(new KeyEvent(now, now, KeyEvent.ACTION_UP, keyCode, 0, meteState,
                KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, inputSource));
    }

我模拟按键跟scrcpy不一样,感觉简单一些,因为我抄的是adb 实现模拟,看一眼就特别清晰。。
现在自己用协同工具非常舒服了,我现在就缺少文件传送了,这个东西还是非常方便。主要平时自己还不到图片发送,主要看手机上APP的东西。