首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android /dev/uinput不工作

Android /dev/uinput不工作
EN

Stack Overflow用户
提问于 2013-07-15 22:36:39
回答 1查看 2.9K关注 0票数 1

我试图通过将数据写入/dev/uinput来控制Android。例如,如果我在我的桌面上输入'A‘,代码会根据key_code写一些东西到input中,而Android的行为应该像我在手机上输入'A’一样。我正在遵循RemoteInput中的代码。我用JB4.2系统在Nexus 4上进行了测试。所有的ioctls都返回积极的结果,这意味着它应该工作。然而,当我输入'A‘时,Android只会刷新虚拟键盘,不会输入任何内容。

EN

回答 1

Stack Overflow用户

发布于 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密钥代码一起工作。

您应该:

  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输出,并检查设备是否会成功创建。它将采用一般的keychar映射和键布局,因为没有定义keymap。如果您想要定义它,请查看/system/usr/keychars/system/usr/keylayout

创建输入装置

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17665090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档