如何检测iPhone是否连接到任何蓝牙设备?

我从iOS 7遇到了这个新的API。

- (NSArray *)retrieveConnectedPeripheralsWithServices:(NSArray *)serviceUUIDs NS_AVAILABLE(NA, 7_0); 

所以很清楚,如果返回数组数大于0,那么它至less连接到一个设备。 但在使用这个API之前,我无法弄清楚我必须在这里传递的参数(serviceUUIDs)。 有人可以用一个例子来解释吗?

外围设备的服务和特性由128位特定于蓝牙的UUID来标识,这些UUID在核心蓝牙框架中由CBUUID对象表示。 尽pipe不是所有标识服务或特性的UUID都是由蓝牙特别兴趣小组(SIG)预先定义的,但为了方便起见,蓝牙SIG已经定义并公布了一些常用的被缩短为16位的UUID。 例如,蓝牙SIG已经预定义了将心率服务标识为180D的16位UUID。 该UUID从其等效的128位UUID,0000180D-0000-1000-8000-00805F9B34FB缩短,该UUID基于Bluetooth 4.0规范第3卷F部分3.2.1中定义的蓝牙基本UUID。

CBUUID类提供了工厂方法,这使得开发应用程序时处理长UUID变得更容易。 例如,您可以简单地使用UUIDWithString方法从服务的预定义的16位UUID中创buildCBUUID对象,而不是在代码中传递心率服务的128位UUID的string表示forms,如下所示:

 CBUUID *heartRateServiceUUID = [CBUUID UUIDWithString: @"180D"]; 

当您使用预定义的16位UUID创buildCBUUID对象时,Core蓝牙预填充128位UUID的其余部分和蓝牙基本UUID。

有关更多信息,请阅读文档

除非您知道至less有一个设备公开的服务,否则您不能使用此方法。 您可以尝试使用通用服务,例如设备信息 – 0x180A – 因为大多数BLE设备将通告此服务,但不能保证。

 CBUUID *deviceInfoUUID = [CBUUID UUIDWithString: @"180A"]; [cbCentral retrieveConnectedPeripheralsWithServices:@[deviceInfoUUID]]; 

通过audio会话类,传统audio设备(耳机,A2DP设备等)可作为audio设备显示 –

检测连接的audio设备的iOS

不同的蓝牙设备提供与其相关的不同服务,并且由特定设备提供的这些服务可以通过与其相关联的特定UUID来标识。

有关蓝牙服务及其相应UUID的更多详细信息,请参阅以下链接:

https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx

所以,当你执行一个search,你可以指定一个标准,build议您的蓝牙设备的首选项进行search。

所以如果你想在你的search偏好的蓝牙设备提供血压和心率,你应该如下:

 [bluetoothmanager scanForPeripheralsWithServices:[NSArray arrayWithObjects:[CBUUID UUIDWithString:@"1810"], [CBUUID UUIDWithString:@"180D"], nil] options:nil]; 

更新:

请参阅下面的链接标题:

发现广告的外围设备

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/PerformingCommonCentralRoleTasks/PerformingCommonCentralRoleTasks.html#//apple_ref/doc/uid/TP40013257-CH3-SW1

注意到如果你通过零将返回所有设备:

注意:如果您为第一个参数指定nil,则中央pipe理器将返回所有已发现的外围设备,而不pipe其支持的服务是什么。 在真实的应用程序中,您可能会指定一个CBUUID对象数组,每个对象表示外设正在通告的服务的通用唯一标识符(UUID)。 当您指定一个服务UUID数组时,中央pipe理器只返回公布这些服务的外设,允许您仅扫描您可能感兴趣的设备.UUID以及代表它们的CBUUID对象将在“服务和特征由UUID标识”。

所以你可以使用它如下:

 [bluetoothmanager scanForPeripheralsWithServices:nil options:nil]; 

它会为您的目的:)