从外部蓝牙扫描器捕获iOS密钥

我试图扫描iOS中包含不可打印字符的二维条码。 我有一个我想要支持的多个扫描仪。 当使用SDK通过串行端口configuration文件(SPP)连接时,我可以读取所有这些数据。 我想支持的设备之一只有人机接口设备(HID)支持(外部键盘)。

当我在HID模式下使用扫描仪来填充UITextField时,不可打印的字符被删除。 我已将设备连接到笔记本电脑,并使用密钥代码捕获设备查看数据实际上是否正在发送。

有没有一种方法来填充UITextField与来自蓝牙设备作为HID连接的不可打印的字符?

我发现如何从HID模式下连接到iOS的蓝牙设备接收不可打印的键码。

作为参考,二维条码具有通用格式:

[)><RS>'01'<GS>'9612345'<GS>'111'<GS>'000'<GS>'012345678901234'<GS>'FDEB'<GS><GS><GS><GS><GS>'25'<GS>'Y'<GS>'123 1ST AVE'<GS>'SEATTLE'<GS>'WA'<RS><EOT> 

其中<RS>是char(30)或sequence ctrl- ^,<GS>是char(29)或sequence ctrl-],<EOT>是char(4)或ctrl-d,它们是ASCII控制代码 。

在iOS 7及以上版本中,您可以使用UIKeyCommand从HID蓝牙设备捕获Key Down事件。 UIKeyCommand用于从蓝牙键盘捕获Command-A之类的东西,但也可用于映射ASCII序列。 诀窍是映射关键代码序列,而不是ASCII代码。 例如在你的视图控制器中,你可以:

 - (NSArray *) keyCommands { // <RS> - char(30): ctrl-shift-6 (or ctrl-^) UIKeyCommand *rsCommand = [UIKeyCommand keyCommandWithInput:@"6" modifierFlags:UIKeyModifierShift|UIKeyModifierControl action:@selector(rsKey:)]; // <GS> - char(29): ctrl-] UIKeyCommand *gsCommand = [UIKeyCommand keyCommandWithInput:@"]" modifierFlags:UIKeyModifierControl action:@selector(gsKey:)]; // <EOT> - char(4): ctrl-d UIKeyCommand *eotCommand = [UIKeyCommand keyCommandWithInput:@"D" modifierFlags:UIKeyModifierControl action:@selector(eotKey:)]; return [[NSArray alloc] initWithObjects:rsCommand, gsCommand, eotCommand, nil]; } - (void) rsKey: (UIKeyCommand *) keyCommand { NSLog(@"<RS> character received"); } - (void) gsKey: (UIKeyCommand *) keyCommand { NSLog(@"<GS> character received"); } - (void) eotKey: (UIKeyCommand *) keyCommand { NSLog(@"<EOT> character received"); } 

我希望这有帮助。