Android 上从外部应用注入按键事件流程分析

 一般大家都习惯通过内核驱动增加linux的输入设备,实际linux也提供了通过非内核方式添加输入设备的方法,通过这些方法增加的输入设备对其他要求输入的应用几乎透明,进而可以容易扩展内核的输入方法。这里以android上蓝牙avrcp控制为例子,说明外部的蓝牙控制按键如何传给android的。

 蓝牙avrcp收到蓝牙按键的处理在extern/bluetooth/audio/control.c文件中。该文件初始化时候就会打开/dev/uinput的设备节点,该节点是内核专门用于扩展上层用户输入的接口。Avrcp打开设备节点后就按照操作uinput的标准方式注册一个新的输入设备。详细的uinput使用方法可以参看Using uinput driver in Linux-

2.6.x to send user input http://www.einfochips.com/download/dash_jan_tip.pdf )注册完成后就开始接受外部蓝牙设备的控制按键信息并转换为本地按键值发送给内核。

从内核方面讲,会按照外部应用请求创建新的输入设备,比如/dev/input/eventX,这里的X根据实际情况变动。

对于android而言,上面动态增加的输入设备必须能够做到实时监控并加入输入设备列表,做到这一点是通过在eventhub.cpp的初始化openPlatformInput时候注册监听/dev/input目录的变化,注册的方法是通过inotify_xxx系列完成,注册的方法可以参看:如何使用inotify_initinotify_add_watch,inotify_rm_watch,read编写监控程序

 http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201011209823241/ 

注册完成后每次在方法getEvent中都会去readNotify,进而做出添加或删除输入设备的动作。这样就完成对avrcp扩展输入的支持工作。

国外有人做了一个通过pc输入按键给android的方法,有兴趣的人可以参看:

http://www.math.bme.hu/~morap/RemoteInput/ 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值