Android/dev/uinput不工作
我试图通过将数据写入/dev/uinput来控制Android。例如,如果我在我的桌面上输入“A”,代码将根据键盘上的代码将某些内容写入uinput,Android的行为应该与我在手机上输入“A”类似。我正在遵循中的代码。我用JB4.2系统在Nexus4上进行了测试。所有IOCTL都返回阳性结果,这意味着它应该工作。然而,当我输入“A”时,Android似乎只刷新虚拟键盘,不输入任何内容 首先,您需要使用Android/dev/uinput不工作,android,android-ndk,linux-device-driver,user-input,vnc-server,Android,Android Ndk,Linux Device Driver,User Input,Vnc Server,我试图通过将数据写入/dev/uinput来控制Android。例如,如果我在我的桌面上输入“A”,代码将根据键盘上的代码将某些内容写入uinput,Android的行为应该与我在手机上输入“A”类似。我正在遵循中的代码。我用JB4.2系统在Nexus4上进行了测试。所有IOCTL都返回阳性结果,这意味着它应该工作。然而,当我输入“A”时,Android似乎只刷新虚拟键盘,不输入任何内容 首先,您需要使用ioctl(m\u fd,UI\u SET\u KEYBIT,key)来“注册”支持的密钥。
ioctl(m\u fd,UI\u SET\u KEYBIT,key)
来“注册”支持的密钥。对于A,您应该使用KEY\u A
,这是在linux/input.h
(\define KEY\u A 30
)中定义的,而不是另一个代码KEY\u A
。根据我的经验,Android上的/dev/uinput
与Linux密钥代码一起工作
你应该:
/dev/uinput
ioctl(m\u fd、UI\u SET\u EVBIT、EV\u KEY)
-支持EV\u KEY事件ioctl(m\u fd、UI\u SET\u EVBIT、EV\u SYN)
-支持EV\u SYN事件ioctl(m\u fd,UI\u SET\u KEYBIT,key)
-为您想要支持的每个keycode支持key
uinput\u user\u dev
结构并填充它,然后将该结构写入/dev/uinput
文件描述符(见下文)ioctl(mufd,UI\u DEV\u CREATE)
创建此设备;MU fd现在将指向新创建的设备logcat
输出,并检查设备是否将成功创建。它将采用通用的keychar映射和键布局,因为没有定义键映射。如果要定义它,请查看/system/usr/keychars
和/system/usr/keylayout
创建输入设备 首先,您需要使用
ioctl(m\u fd,UI\u SET\u KEYBIT,key)
来“注册”支持的密钥。对于A,您应该使用KEY\u A
,这是在linux/input.h
(\define KEY\u A 30
)中定义的,而不是另一个代码KEY\u A
。根据我的经验,Android上的/dev/uinput
与Linux密钥代码一起工作
你应该:
/dev/uinput
ioctl(m\u fd、UI\u SET\u EVBIT、EV\u KEY)
-支持EV\u KEY事件ioctl(m\u fd、UI\u SET\u EVBIT、EV\u SYN)
-支持EV\u SYN事件ioctl(m\u fd,UI\u SET\u KEYBIT,key)
-为您想要支持的每个keycode支持key
uinput\u user\u dev
结构并填充它,然后将该结构写入/dev/uinput
文件描述符(见下文)ioctl(mufd,UI\u DEV\u CREATE)
创建此设备;MU fd现在将指向新创建的设备logcat
输出,并检查设备是否将成功创建。它将采用通用的keychar映射和键布局,因为没有定义键映射。如果要定义它,请查看/system/usr/keychars
和/system/usr/keylayout
创建输入设备
@用户1659072为您做了这项工作吗?如果是,请将答案标记为正确。很高兴看到一个简短的代码示例,如何实现它。@user1659072这对您有用吗?如果是,请将答案标记为正确。如果能看到一个简短的代码示例,以及如何实现它,那就太好了。
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)