iOS上的IOBluetooth /连接到具有Mac地址的设备?

时间:2014-08-15 11:42:49

标签: ios bluetooth core-bluetooth iobluetooth

在工作中,我被赋予使命:)移植连接到设备的Android库来做事情(我不能说更多因为NDA)。 Android代码使用getRemoteDevice(macAddress)createRfcommSocketToServiceRecord基本上跳过整个配对机制,然后“按原样”发送字节。这可能在iOS上吗?是否存在这种“肮脏”程度: - )

2 个答案:

答案 0 :(得分:4)

如果是蓝牙2.1则非常简单。您也可以创建套接字。例如:

EASession *session = [[EASession alloc] initWithAccessory:accessory
                                   forProtocol:PROTOCOL_STRING];
if (session) {

    [[session inputStream] setDelegate:self];
    [[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [[session inputStream] open];

    [[session outputStream] setDelegate:self];
    [[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [[session outputStream] open];
}

但是,正如@ Paulw11所提到的,你需要通过MFI计划。

蓝牙LE有很多不同。它没有插座。您只能使用服务和特征进行操作。

顺便说一下,只有使用其MAC地址才能连接到BLE设备。您首先需要使用其服务UUID扫描此设备:

[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kScanServiceUUID]] options:options];

然后才连接到它的CBPeripheral。

<强>更新 那么在蓝牙2.1中“基本上跳过整个配对机制”,我猜你不能在没有用户的情况下进行配对。 有一种方法向用户显示对话框,他可以选择他想要配对的设备,但这就是我能找到的:

- (void)showBluetoothAccessoryPickerWithNameFilter:(NSPredicate *)predicate completion:(EABluetoothAccessoryPickerCompletion)completion
  

显示允许用户将设备与蓝牙配件配对的警报。

与蓝牙2.1不同,蓝牙LE中根本不需要配对。

答案 1 :(得分:2)

除非您可以控制设备固件,否则无法通过CoreBluetooth完成此操作。 (这只谈到BT 4.0。)我几个星期以来一直打败了我的脑袋,似乎没有办法在App Store评审过程中通过这个方式。此外,蓝牙4.0标准具体说明MAC地址不固定,设备可能会更改它。

但是,如果你能控制进入GATT的内容,你可能会假装android正在做什么。

我不知道MFI计划上有哪些接口,以及它们是否更适合您的目标。