gpt4 book ai didi

Android/dev/uinput 不工作

转载 作者:行者123 更新时间:2023-11-30 03:29:44 27 4
gpt4 key购买 nike

我试图通过将数据写入/dev/uinput 来控制 Android。例如,如果我在桌面上输入“A”,代码会根据 key_code 向 uinput 写入一些内容,而 Android 应该表现得像我在手机上输入“A”一样。我遵循 RemoteInput 中的代码.我在 JB 4.2 系统的 Nexus 4 上进行了测试。所有 ioctl 都返回正结果,这意味着它应该可以工作。但是,当我输入“A”时,Android 似乎只刷新虚拟键盘而没有输入任何内容。

最佳答案

首先,您需要使用 ioctl(m_fd, UI_SET_KEYBIT, key)“注册”支持的 key 。对于 A,您应该使用 KEY_A,它在 linux/input.h (#define KEY_A 30) 中定义,而不是 KEYCODE_A ,这是一个不同的代码。根据我的经验,Android 上的 /dev/uinput 使用 Linux 键码。

你应该:

  1. 打开/dev/uinput
  2. ioctl(m_fd, UI_SET_EVBIT, EV_KEY) - 支持 EV_KEY 事件
  3. ioctl(m_fd, UI_SET_EVBIT, EV_SYN) - 支持 EV_SYN 事件
  4. ioctl(m_fd, UI_SET_KEYBIT, key) - 支持key - 对于你想要支持的每个键码
  5. 创建uinput_user_dev 结构并填充它,然后将该结构写入/dev/uinput 文件描述符(见下文)
  6. 调用ioctl(m_fd, UI_DEV_CREATE)来创建这个设备; m_fd 现在将指向新创建的设备。

监视logcat 输出并检查设备是否成功创建。它将采用通用的键字符映射和键布局,因为没有定义键映射。如果您想定义它,请查看 /system/usr/keychars/system/usr/keylayout


创建uinput设备

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)

关于Android/dev/uinput 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17665090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com