如何获得swift中配对的蓝牙设备列表?

我需要将配对的蓝牙设备(iOS设备)列表与iOS设置中“蓝牙”部分的列表相同,如下图所示。

在此处输入图像描述

可能吗?
您是否看过任何使用此类function的应用程序?

我尝试了以下内容: link1 , link2 , link3 , link4 , link5 , link6

但没有什么能帮我清楚地得到确切的清单。 我希望应该有办法实现这一目标。 请分享您的经验,帮助我。 谢谢。

只要您拥有广告UUID,就可以获得配对/连接设备的列表。

dispatch_queue_t centralQueu = dispatch_queue_create("A_NAME", NULL); _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueu options: @{CBCentralManagerOptionRestoreIdentifierKey:@"RESTORE_KEY", CBCentralManagerOptionShowPowerAlertKey: @YES}]; _ServiceUUIDs = @[[CBUUID UUIDWithString:@"THE_UUID"]] //the array of CBUUIDs which you are looking for [_centralManager retrieveConnectedPeripheralsWithServices:_ServiceUUIDs] 

您可以使用一些iOS应用程序(例如LightBlue和nRFConnect)获取BLE设备广告UUID

无法从iOS检索配对的外围设备列表。 无论是否可以检查特定外设是否配对。

检索配对的外围设备

您需要考虑两种情况:

  1. 外围设备可能已连接到系统中(iOS会自动连接某些外围设备,以便显示电池电量)。 在这种情况下,外围设备将不会进行广播,并且使用scanForPeripherals检测将无法正常工作。

  2. 外围设备已配对,但已断开连接。 在这种情况下, retrieveConnectedPeripherals(withServices:)将不起作用。

因此,要检索外围设备,您需要将两者结合起来。 首先,您需要检查它是否位于从retrieveConnectedPeripherals(withServices:)返回的外设中。 如果没有,你应该scanForPeripherals

如果要检索超出范围的外围设备,可以尝试使用retrievePeripherals(withIdentifiers:) ,但它也可能不返回配对设备,它依赖于配对后必须保存的外围设备UUID

检测外围设备是否已配对

有一种方法可以检测特定外设是否配对。 您需要尝试从受保护的特性(需要加密 – 绑定)中读取。 如果您收到预期数据,则表示用户接受了配对请求。 否则您将收到空响应或无响应。

参考

您可以在我的文章中阅读有关蓝牙的更多信息

  • 原始答案
  • Swift – 使用流量控制器的蓝牙低功耗通信
  • 如何与iOS上的蓝牙低功耗设备进行通信
  • 蓝牙低功耗 – iOS上的后台模式

您需要找到您感兴趣的服务UUID,在我的情况下它完美地工作,

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil]; [self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:SERVICE_UUID]] options:options]; 

当它找到任何宣传相同服务UUID的设备时,它将出现在你上面指出的屏幕上。

以这种方式处理didDiscoverperipherel:

 -(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{ _discoveredPeripheral = peripheral; if(![self.mRemoteDevices containsObject:_discoveredPeripheral]) { NSArray *peripherels = [self.centralManager retrievePeripheralsWithIdentifiers:@[_discoveredPeripheral.identifier]]; [self.mRemoteDevices addObject:[peripherels objectAtIndex:0]]; } }