我正在开发一个使用摩托罗拉 CS3070 条码扫描器的 iPad 应用程序。我使用 HID 配置文件连接扫描仪,iPad 将其视为蓝牙键盘。当扫描仪使用蓝牙连接到 iPad 时,如果我们关注应用程序内的任何文本字段,它不会打开设备虚拟键盘。这是预期的,因为设备将条码扫描器视为蓝牙键盘。
如果扫描仪断开连接,在进行扫描时,将显示设备虚拟键盘。我想要的是,当扫描仪断开连接时,我需要从某个事件中获取该信息并向用户显示扫描仪已断开连接的弹出窗口/警报。我认为如果有办法知道何时显示设备虚拟键盘或应用程序正在使用蓝牙键盘,我们可以使用该信息来显示弹出窗口。
请让我知道是否可行或我可以尝试的任何其他建议。
提前致谢。
一种间接且 SDK 安全的方法是将文本字段设置为第一响应者。如果存在外部键盘,则不应发布 UIKeyboardWillShowNotification 本地通知。
您可以收听 "GSEventHardwareKeyboardAttached"(kGSEventHardwareKeyboardAvailabilityChangedNotification) Darwin 通知,但这是一个私有(private) API,因此如果您使用它,您的应用可能会被拒绝。要检查外部硬件是否存在,请使用私有(private) GSEventIsHardwareKeyboardAttached() 函数。
UIKit 监听这个并相应地设置 UIKeyboardImpl.isInHardwareKeyboardMode 属性,但同样这是私有(private) API。
我从 here 得到了这个答案.