在工作中,我被赋予了任务:) 移植一个连接到设备以执行操作的 Android 库(由于 NDA,我不能说更多)。Android 代码使用getRemoteDevice(macAddress)
andcreateRfcommSocketToServiceRecord
基本上跳过整个配对机制,然后“按原样”发送字节。这在iOS上可能吗?是否有这种程度的“肮脏”:-)
问问题
2772 次
2 回答
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 程序。
低功耗蓝牙有很大不同。它没有插座。您只能使用服务和特征进行操作。
顺便说一句,您不能仅使用其 MAC 地址连接到 BLE 设备。您首先需要使用其服务 UUID 扫描此设备:
[_centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kScanServiceUUID]] options:options];
只有在那之后才连接到它的 CBPeripheral。
更新: 在蓝牙 2.1 中“基本上跳过整个配对机制”怎么样,我想你不能在没有用户的情况下进行配对。有一种方法可以向用户显示对话框,他可以选择他想要配对的设备,但这就是我能找到的全部:
- (void)showBluetoothAccessoryPickerWithNameFilter:(NSPredicate *)predicate completion:(EABluetoothAccessoryPickerCompletion)completion
显示允许用户将设备与蓝牙配件配对的警报。
与蓝牙 2.1 不同,在蓝牙 LE 中,您根本不需要配对。
于 2014-08-16T20:20:41.100 回答
2
除非您可以控制设备固件,否则这无法通过 CoreBluetooth 完成。(仅谈论 BT 4.0。)我为此苦苦挣扎了数周,似乎没有办法以在 App Store 审查过程中通过召集的方式解决这个问题。此外,蓝牙 4.0 标准明确表示 MAC 地址不是固定的,设备可能会在您身上更改它。
但是,如果您可以控制 GATT 中的内容,您可能会伪造 android 正在做什么。
我不知道 MFI 计划中有哪些接口可用,以及它们是否更符合您的目标。
于 2014-08-16T20:11:14.997 回答