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

时间:2014-09-16 10:06:11

标签: ios iphone ios7 bluetooth core-bluetooth

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

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

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

3 个答案:

答案 0 :(得分:4)

除非您至少知道设备公开的一项服务,否则不能使用此方法。您可以尝试使用公共服务,例如设备信息 - 0x180A - 因为大多数BLE设备都会宣传此服务,但不能保证。

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

传统音频设备(耳机,A2DP设备等)通过音频会话类作为音频设备可见 -

Detect attached audio devices iOS

答案 1 :(得分:2)

外围设备的服务和特性由128位蓝牙专用UUID标识,这些UUID由CBUUID对象在Core Bluetooth框架中表示。虽然并非所有识别服务或特性的UUID都是由蓝牙特别兴趣小组(SIG)预定义的,但蓝牙SIG已经定义并发布了许多常用的UUID,为方便起见,这些UUID已缩短为16位。例如,蓝牙SIG已经预定义了将心率服务标识为180D的16位UUID。此UUID与其等效的128位UUID 0000180D-0000-1000-8000-00805F9B34FB相缩,该UUID基于蓝牙基础UUID,该基础UUID在蓝牙4.0规范第3卷第F部分第3.2.1节中定义。

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

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

当您从预定义的16位UUID创建CBUUID对象时,Core Bluetooth会使用蓝牙基础UUID预填充剩余的128位UUID。

更多信息,请read documentation

答案 2 :(得分:-1)

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

有关蓝牙服务及其各自UUID的更多详情,请参阅以下链接:

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

因此,当您执行搜索时,您可以指定一个标准,建议您的蓝牙设备首选项进行搜索。

所以,如果您想要在您的搜索偏好中提供血压和心率的蓝牙设备,请按以下步骤操作:

[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

在NOTE中提到,如果你传递nil,它将返回所有设备:

注意:如果为第一个参数指定nil,则中央管理器将返回所有已发现的外围设备,无论其支持的服务如何。在真实的应用程序中,您可能会指定一组CBUUID对象,每个对象代表一个外围设备正在通告的服务的通用唯一标识符(UUID)。指定服务UUID数组时,中央管理器仅返回通告这些服务的外围设备,允许您仅扫描您可能感兴趣的设备。 UUID和代表它们的CBUUID对象将在“服务和特征由UUID识别”中详细讨论。

所以你可以按照以下方式使用它:

[bluetoothmanager scanForPeripheralsWithServices:nil options:nil];

它将满足您的目的:)