可以为iOS生成连接的蓝牙设备列表吗?

时间:2015-06-04 06:37:03

标签: ios swift macos bluetooth

我试图确定iOS中通过蓝牙连接的设备,但似乎无法弄明白。理想情况下,我想生成一个连接的蓝牙设备列表。

我已尝试使用" retrieveConnectedPeripheralsWithServices"但这需要特定的服务来搜索。我想生成所有连接蓝牙设备的列表,而不仅仅是特定服务的蓝牙设备。有没有办法只搜索所有服务而不循环遍历所有可能的服务?

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

以下是适用于iOS的解决方案(谢谢Larme):

NSArray *connectedAccessories = [[EAAccessoryManager sharedAccessoryManager] connectedAccessories]; 

文档:

https://developer.apple.com/library/prerelease/ios/documentation/ExternalAccessory/Reference/EAAccessoryManager_class/index.html#//apple_ref/occ/instp/EAAccessoryManager/connectedAccessories

如果有人需要,这是Mac的文档:

  

https://developer.apple.com/library/mac/documentation/DeviceDrivers/Conceptual/Bluetooth/BT_Intro/BT_Intro.html

和Mac的代码段

NSArray *devices = [IOBluetoothDevice pairedDevices];

对于alan478的BLE问题:

核心蓝牙框架提供iOS和Mac应用程序与配备蓝牙低功耗无线技术的设备进行通信所需的类。你可以看看这个教程:

http://www.raywenderlich.com/52080/introduction-core-bluetooth-building-heart-rate-monitor

和BLE代码段是:

// In this case you need to tell UUID for serching specific device
CBUUID *hrate = [CBUUID UUIDWithString:@"1800"];

// Create a dictionary for passing down to the scan with service method
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];

// Tell the central manager (cm) to scan for the heart rate service
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:hrate] options:scanOptions]

请在developer.apple.com上阅读此文档:

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html

这是一个有趣的段落:

明智地探索外围设备的数据 在开发应用程序以满足特定用例时,外围设备可能具有比您可能感兴趣的更多服务和特性。发现所有外围设备的服务和相关特性会对电池寿命和应用程序性能产生负面影响。因此,您应该只查找并发现应用所需的服务和相关特征。

例如,假设您已连接到具有许多可用服务的外围设备,但您的​​应用只需要访问其中的两个。您可以通过将其服务UUID(由CBUUID对象表示)的数组传递给CBPeripheral类的discoverServices:方法来查找和发现这两个服务,如下所示:

[peripheral discoverServices:@[firstServiceUUID, secondServiceUUID]];

在您发现了您感兴趣的两个服务后,您可以同样查找并发现您感兴趣的这些服务的特征。再次,只需传入一个UUID数组,以识别您想要的特征发现(对于每个服务)发现特征:forService:CBPeripheral类的方法。

还有以下评论:

“认为Apple禁止这件事。我们只能获得具有特定CBUUID的设备列表。所以如果你想列出所有设备(与本机蓝牙设置相同)那么这是不可能的。请纠正我,如果我我错了。 - Mrug 3月11日13:24“

在这个问题下:

How to get list of available Bluetooth devices?

答案 1 :(得分:0)

您需要考虑两种情况:

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

  2.   
  3. 外围设备已配对,但已断开连接。在这种情况下,retrieveConnectedPeripherals(withServices :)无法正常工作。

  4.   

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

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

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