【问题标题】:Catching all inputs from external (bluetooth) keyboard捕获来自外部(蓝牙)键盘的所有输入
【发布时间】:2014-08-07 04:26:08
【问题描述】:

问题

我想捕捉/预览我们的应用程序接收到的所有键盘输入。

只要捕捉到来自外部键盘的输入就足够了。

我已经找到解决方案示例,例如为UITextViewTextDidChangeNotificationUITextFieldTextDidChangeNotification 注册通知观察者,但由于这需要TextViewTextField 成为当前的第一响应者,它并不能满足我们的所有需求。

一个例子是我们使用扫描来过滤一个列表,其中整个视图是列表和导航按钮。

有什么方法可以注册一个可以预览应用程序接收到的所有关键输入的观察者?

背景:

我有一个 iPhone 应用程序,它可以扫描条形码以识别多个不同视图中的对象。

目前,我们通过相机(使用 zbar 库)或 MFI 认证的条形码扫描仪扫描条形码。 为了支持更多设备(例如 iPad),我们正在研究获取条形码的其他方法。

我们正在研究的设备类别之一是蓝牙扫描仪,可识别为 HID 键盘。这将是一个很好的补充,因为它可以用于不同的产品和制造商。

为了

【问题讨论】:

  • 您必须使用私有 API。见stackoverflow.com/questions/15629514/…
  • @storoj 谢谢!即使这很糟糕 :) 如果您有任何很好的参考资料说明为什么没有私有 API 就无法完成,您可以将它们作为答案发布,我会将其标记为答案。

标签: iphone ios cocoa-touch


【解决方案1】:

iOS 7 及更高版本的另一个选项是在当前视图控制器上使用声明 keyCommands 方法。它可以捕获特殊的组合键。缺点是您需要明确声明您要查找的内容。

I answered my own question over here 关于从以 HID 模式连接的扫描仪的二维条码中获取特殊字符。

【讨论】:

  • 听起来不错,我研究一下,看看能不能解决我们的问题。
【解决方案2】:

似乎 IOHID** 函数的使用可能不会被 AppStore 审阅者拒绝,因为 IOKit 是“白名单框架”(Will Apple reject Mac OS App which uses IOKit framework?)

所以你真的可以尝试使用这个主题IOHIDEventSystemClientScheduleWithRunLoop with EXC_BAD_ACCESS的回调函数,希望对你有帮助! 我使用了这段代码,即使您的应用程序处于后台(只需设置特殊的后台模式),它也能工作,捕获所有系统触摸和键盘事件。

【讨论】:

  • 看起来不错。我还没有确认它是否有效,但它看起来是正确的方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多