我目前正在开发一个基于蓝牙低功耗设备的 iOS 应用程序。为了获得唯一的标识符来比较所获得的外设,我必须获取外设的 MAC 地址。
据观察,外围设备的 UUID 属性在不同的 iOS 设备上有所不同,并且外围设备要获得 UUID,它必须至少连接到主设备一次。由于我必须处理登机手续,因此我不想建立连接。当我浏览蓝牙服务门户时,我发现设备信息本身就是一项服务,除非在主 iOS 设备和外围蓝牙低功耗设备之间建立连接,否则无法检索该服务。
我发现在 Android 中,当我们收到设备扫描自身的响应时,我们可以获得设备的全部信息,包括其 MAC 地址(使用 getAddress())。
我在 CBPeripheral 类中没有找到与设备地址相关的任何属性。
获取唯一参数的另一种方法是自定义广告数据以发送有关设备的附加信息,这需要在固件方面进行更多工作。
那么,在 iOS 中,有什么方法可以让我在不建立连接的情况下获取蓝牙低功耗外设的 MAC 地址吗?
任何帮助将不胜感激。
CBPeripheral 的标识符属性将满足您的目的,可从 CBCentralManager 的 didDiscoverPeripheral 委托方法中的仍未连接的设备获取:
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
CBPeripheral *peripheral ...
NSUUID* serverId = [peripheral identifier];
我正在试验六台 LE 设备,其中包括多组相同的设备。我刚刚确认,在两个 iOS 设备上,所有这些 LE 小部件的标识符都是不同的,但对于每个 iOS 设备,每个小部件的标识符在应用程序启动甚至应用程序删除和重新安装期间都会保留。我想说,这明确证明操作系统在内部存储了足够的信息,对于给定的 iThing,您将能够区分并重新识别应用程序遇到的所有外围设备,而无需实际连接到它们。
另请注意,advertisementData
,也可以在连接之前使用,其中充满了有用的信息,例如CBAdvertisementDataLocalNameKey
, CBAdvertisementDataManufacturerDataKey
, CBAdvertisementDataServiceUUIDsKey
, CBAdvertisementDataSolicitedServiceUUIDsKey
等,尽管没有一个像[外设标识符]那样能够唯一地标识设备。
我没有尝试进行设备备份和恢复来证明 UUID 已保留,但我敢打赌它们是保留的,如果没有,Apple 会认为这是一个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)