蓝牙经典连接感知

Bluetooth classic connection awareness

我有一个蓝牙应用程序可以通过低功耗与外围设备通信。

此外围设备还与 iOS 设备建立了经典 (HFP and/or A2DP) 连接。碰巧经典连接有时会中断。

我需要的是能够在应用程序中通知用户经典连接已丢失。

如何让我的应用程序识别经典连接?

您更喜欢哪种方式?

虽然 CoreBluetooth 用于访问蓝牙 LE 或 4.0 设备,但您可以使用 ExternalAccessory 框架与其他蓝牙设备通信。

像这样:

- (void)registerForNotifications
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil];
    [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
} 

- (void)accessoryDidConnect:(NSNotification *)notification
{
    // Weird thing with ExternalAccessory where this notification is called more than once per accessory...
    if ([[(EAAccessory *)[[(EAAccessoryManager *)notification.object connectedAccessories] lastObject] protocolStrings] count]) {
        // Valid call
        if ([[(EAAccessory *)[notification.userInfo valueForKey:EAAccessoryKey] protocolStrings] containsObject:/*Protocol string for the accessory*/]) {

        }
    }
}

- (void)accessoryDidDisconnect:(NSNotification *)notification
{
    if ([[(EAAccessory *)[notification.userInfo valueForKey:EAAccessoryKey] protocolStrings] containsObject:/*Protocol string for the accessory*/]) {
        // Disconnected
    }
}

为此,您必须将密钥 'Supported external accessory protocols' 添加到应用的 info.plist 并在该密钥下的数组中列出蓝牙设备的协议。

另请注意,要在 App Store 上分发,蓝牙设备必须在 Apple MFi 程序下注册,并且您必须是(设备制造商)认可的开发人员。

对于非 MFI 设备,我发现获取有关已连接蓝牙经典设备的 任何 信息的唯一方法是(间接)通过 AVAudioSession 单例。 AVAudioSession Class Reference

首先查看当前路线属性。