处理Android中的所有鼠标事件

mjo*_*eer 16 usb mouse android bluetooth

好吧,问题很简单 - 如何在android 2/3/4中处理左/右/中间点击,滚轮和(!)悬停移动.

我一直在挖掘这个话题,发现了以下内容

  • 在api 14中,我们可以使用花哨的新MotionEvent处理几乎任何事情
  • 自从api 12(仍然缺少蓝牙)(UPD OA向后移植到2.3.4)以来,我们也有开放式配件似乎可以使用USB鼠标
  • 鼠标实际上适用于具有ICS和Honeycomb以及cyanogen 2.3.7的平板电脑,但只需按一下按钮即可.我想知道有没有办法拦截鼠标消息.

请帮助我了解如何在每个版本的android中以最简单和正确的方式处理蓝牙和USB鼠标.或者说它不可能.

UPD2:看起来只有3.1+的USB Host,而USB Accessory对此任务无用

Mai*_*aik 20

这些是我的发现:

对于Api等级<9:

  • 外部鼠标主按钮的处理方式与普通手指触摸相同.似乎没有办法检测鼠标.
  • 辅助按钮通过KeyEventwith发送KeyEvent.KEYCODE_BACK.无法区分实际的"后退"按下和二次按钮按下.

对于Api等级9+:

  • 添加了一种新方法MotionEvent.getSource().我用这个来检测输入是否来自鼠标.
  • 辅助按钮仍然通过KeyEventwith 调度KeyEvent.KEYCODE_BACK.在某些设备上KeyEvent.getSource()返回InputDevice.SOURCE_MOUSE,因此在某些情况下辅助按钮检测有效.

对于Api等级12+:

  • OnGenericMotionListener已被添加.我用这个来检测鼠标移动ACTION_HOVER_MOVE和轮子的变化ACTION_SCROLL.

对于Api等级14+:

  • 新方法MotionEvent.getButtonState().我跟踪此一个当如果伯,仲,叔鼠标按钮被按下以区分MotionEvent.getActionMasked()ACTION_MOVE,ACTION_DOWNACTION_UP.

我没有查看Api Level 15/16或工具类型,因为我能够使用上面描述的内容跟踪所有鼠标事件.如果有人有额外的信息或我错过了15/16 /工具类型会很有趣.