我试图通过将数据写入/dev/uinput来控制Android。例如,如果我在我的桌面上输入'A‘,代码会根据key_code写一些东西到input中,而Android的行为应该像我在手机上输入'A’一样。我正在遵循RemoteInput中的代码。我用JB4.2系统在Nexus 4上进行了测试。所有的ioctls都返回积极的结果,这意味着它应该工作。然而,当我输入'A‘时,Android只会刷新虚拟键盘,不会输入任何内容。
发布于 2014-06-11 21:23:14
首先,您需要使用ioctl(m_fd, UI_SET_KEYBIT, key)“注册”受支持的键。对于A,您应该使用KEY_A,它是在linux/input.h (#define KEY_A 30)中定义的,而不是KEYCODE_A定义的,后者是一种不同的代码。根据我的经验,安卓上的/dev/uinput与Linux密钥代码一起工作。
您应该:
/dev/uinputioctl(m_fd, UI_SET_EVBIT, EV_KEY) -支持EV_KEY事件ioctl(m_fd, UI_SET_EVBIT, EV_SYN) -支持EV_SYN事件ioctl(m_fd, UI_SET_KEYBIT, key) -支持key -对于您想要支持的每个密钥代码uinput_user_dev结构并填充它,然后将该结构写入/dev/uinput文件描述符(见下文)ioctl(m_fd, UI_DEV_CREATE)创建此设备;m_fd现在将指向新创建的设备。请监视logcat输出,并检查设备是否会成功创建。它将采用一般的keychar映射和键布局,因为没有定义keymap。如果您想要定义它,请查看/system/usr/keychars和/system/usr/keylayout。
创建输入装置
uinput_user_dev uidev;
memset(&uidev, 0, sizeof(uidev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-test");
uidev.id.bustype = BUS_USB;
uidev.id.vendor = 0x1212;
uidev.id.product = 0xabab;
uidev.id.version = 3;
write(m_fd, &uidev, sizeof(uidev)https://stackoverflow.com/questions/17665090
复制相似问题