iOS关键代码捕获从外部蓝牙扫描仪



我正在尝试扫描iOS中包含不可打印字符的2D条形码。我想支持多个扫描仪。当使用SDK通过串口配置文件(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>

& lt; RS>ctrl-^, 是字符(29)或序列ctrl-],和为char(4)或ctrl-d,它们是ASCII控制码。

在ios7及以上版本中,您可以使用UIKeyCommand从HID蓝牙设备捕获按键事件。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");
}

我希望这对你有帮助。

最新更新