我有一个蓝牙应用程序,可以通过低能耗与外围设备通信。
此外围设备还具有与iOS设备的经典(HFP和/或A2DP)连接。碰巧经典连接有时会中断。
我需要的是能够在应用程序中通知用户经典连接已丢失。
如何让我的应用程序了解经典连接?
您希望以何种方式执行此操作?
答案 0 :(得分:2)
虽然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
}
}
要使其正常工作,您必须添加密钥'支持的外部附件协议'到您应用的info.plist,并列出该密钥下阵列中蓝牙设备的协议。
另请注意,要在App Store上发布,蓝牙设备必须在Apple MFi计划下注册,您必须是公认的开发人员(由设备制造商提供)。
答案 1 :(得分:0)
对于非MFI设备,我发现在连接的Bluetooth Classic设备上获取任何信息的唯一方法是(间接)通过AVAudioSession单例。 OpenRead
首先查看currentRoute属性。