内容目录
背景
之前实现输入法功能,然后去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的东西。