蓝牙经典连接感知
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
首先查看当前路线属性。
我有一个蓝牙应用程序可以通过低功耗与外围设备通信。
此外围设备还与 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
首先查看当前路线属性。