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

iOS上的IOBluetooth/连接到具有Mac地址的设备?,ios,bluetooth,core-bluetooth,iobluetooth,Ios,Bluetooth,Core Bluetooth,Iobluetooth,在工作中,我的任务是:)移植一个Android库,连接到一个设备上做事情(因为NDA,我不能说更多)。Android代码使用getRemoteDevice(macAddress)和createRfcommSocketToServiceRecord基本上跳过整个配对机制,然后“按原样”发送字节。这在iOS上可能吗?是否存在这种级别的“肮脏”:-除非您可以控制设备固件,否则无法通过CoreBluoth实现。(只说BT 4.0。)几个星期以来,我一直在与之抗争,似乎没有办法通过应用商店审查过程的审查。

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

除非您可以控制设备固件,否则无法通过CoreBluoth实现。(只说BT 4.0。)几个星期以来,我一直在与之抗争,似乎没有办法通过应用商店审查过程的审查。此外,Bluetooth 4.0 std明确表示MAC地址不固定,设备可能会在您身上更改MAC地址

然而,如果你能控制进入关贸总协定的内容,你可能会假装安卓正在做什么


我不知道MFI程序上有哪些接口,以及它们是否更符合您的目标

如果是Bluetooth 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程序

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

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

[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kScanServiceUUID]] options:options];
然后再连接到它的外围设备

更新: 在Bluetooth 2.1中“基本上跳过整个配对机制”又如何呢?我想你不能没有用户就进行配对。 有一种方法可以向用户显示对话框,用户可以选择要配对的设备,但我只能找到这些:

- (void)showBluetoothAccessoryPickerWithNameFilter:(NSPredicate *)predicate completion:(EABluetoothAccessoryPickerCompletion)completion
显示允许用户将设备与蓝牙附件配对的警报


与Bluetooth 2.1不同的是,在Bluetooth LE中,您根本不需要配对。

是Bluetooth Low Energy还是Bluetooth 2.1?@Paulw11:该设备同时具备这两种功能。理想情况下,我的老板希望我在2.1中做到这一点,但我可能可以很容易地“推销”他们去做LE。你为什么特别问?因为在iOS下,你需要通过苹果为iPhone制作的(MFi)程序与Bkuetooth 2.1设备通话,但BLE由核心蓝牙框架支持,苹果没有参与。BLE的缺点是它不能在早于iPhone4S或iPad3的设备上工作