【问题标题】:How to get Paired BLE device in iOS?如何在 iOS 中获得配对的 BLE 设备?
【发布时间】:2019-05-02 17:40:42
【问题描述】:

我将 BLE 与 CoreBluetooth 连接并配对。

现在,当我回到我的应用屏幕时,我想确保 BLE 已经与 iOS 设备配对。

  1. 如果我在默认值中存储值并删除应用程序,这种情况将无法获取设备。

  2. 如果用户从设置 -> 蓝牙 -> 设备列表中删除配对的蓝牙外围设备,这种情况也无法识别。

    NSArray *ary = [self.bleMgr retrieveConnectedPeripheralsWithServices:@[[CBUUID UUIDWithString:@"180A"]]];
    
    NSUUID *nsUUID = [[NSUUID alloc] initWithUUIDString:identifier];
    NSArray *temp = [self.bleMgr retrievePeripheralsWithIdentifiers:@[nsUUID]];
    

以上两行代码都没有给出可靠的结果。

如何在应用中获取配对的 BLE 设备?

【问题讨论】:

  • 你每次都得到相同的 uuid 吗?
  • @HSAM 是的,为每个 ble 获取相同的 uuid。

标签: ios objective-c bluetooth-lowenergy core-bluetooth


【解决方案1】:

第一次发现外围设备时,系统会生成一个标识符(一个 UUID,由 NSUUID 对象表示)来标识外围设备。

然后您可以存储此标识符(例如,使用 NSUserDefaults 类的资源),然后使用它尝试使用 CBCentralManager 类的 retrievePeripheralsWithIdentifiers: 方法重新连接到外围设备。

以下描述了使用此方法重新连接到您之前连接的外围设备的一种方法。

knownPeripherals = [myCentralManager retrievePeripheralsWithIdentifiers:savedIdentifiers];

NSUUID 类不是与 CoreFoundation 的免费桥接的 CFUUID。使用 UUID 字符串在 CFUUIDRef 和 NSUUID 之间进行转换,如果 需要。不保证两个 NSUUID 对象具有可比性 指针值(如 CFUUID 一样);使用 isEqual(_:) 比较两个 NSUUID 实例。

请参考:https://developer.apple.com/documentation/foundation/nsuuid

参考最后两节:https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html#//apple_ref/doc/uid/TP40013257-CH6-SW1

【讨论】:

  • 在这种情况下会发生什么! 1.如果我在默认值中存储值并删除应用程序,这种情况将无法获取设备。
  • 是的正确,那么剩下的唯一方法就是将 uuid 存储在钥匙串中
  • 好的,第二种情况,如果用户从设置 -> 蓝牙 -> 设备列表中删除配对的蓝牙外围设备,这种情况也无法识别。
  • 所以现在你已经使用 do try catch 块来处理这种情况,在 catch 中你会得到它无法连接的错误,所以你必须再次手动连接
  • 抱歉,我无法获取您的 try catch 逻辑。你想放在哪里? **** 在连接外围设备或其他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 2014-08-29
  • 2013-10-01
  • 2014-03-19
  • 1970-01-01
  • 2020-07-31
相关资源
最近更新 更多