1. Los protocolos de audio Bluetooth se dividen habitualmente en dos tipos:
1. Protocolo de audio unidireccional de alta fidelidad (es decir, salida), su tipo común es BluetoothA2DPOutput, principalmente para escuchar música y ver videos;
2. Protocolo de audio bidireccional de baja fidelidad (es decir, salida, entrada), los tipos comunes son BluetoothHFP (es decir, perfil de manos libres) y BluetoothHSP (perfil de auriculares), tanto para escuchar como para hablar;
2. Obtener estado
1. Bluetooth está activado y los auriculares no están conectados - Altavoz
2. Protocolo de audio unidireccional de alta definición (salida) - BluetoothA2DPOutput
3. Protocolo de audio bidireccional de baja fidelidad (salida, entrada): BluetoothHFP, BluetoothHSP
3. Implementación del método
Obtener estado de conexión
#pragma mark - ****************************** 蓝牙耳机是否链接 - 状态
+ (BOOL)isBluetoothHeadsetConnectedState {
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionRouteDescription *routeDescription = [session currentRoute];
if (routeDescription) {
NSArray *outputs = [routeDescription outputs];
if (outputs && 0 < [outputs count]) {
AVAudioSessionPortDescription *portDescription = [outputs objectAtIndex:0];
NSString *portType = [portDescription portType];
if (portType && [portType isEqualToString:@"BluetoothA2DPOutput"] && [portType isEqualToString:@"BluetoothHFP"] && [portType isEqualToString:@"BluetoothHSP"]) {
return YES;
}
}
}
return NO;
}
2. Obtenga la entidad de conexión.
#pragma mark - ****************************** 蓝牙耳机是否链接 - 实体
+ (AVAudioSessionPortDescription *)isBluetoothHeadsetConnectedEntity {
/*
蓝牙开启未链接耳机:
Speaker
单向保真音频协议(输出):
BluetoothA2DPOutput
...
双向保真音频协议(输入 & 输入):
BluetoothHFP - HFP(Hands-Free Profile)
BluetoothHSP - HSP(HeadSet Profile)
其它:
Receiver
*/
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionRouteDescription *routeDescription = [session currentRoute];
// NSLog(@"%@", routeDescription);
if (routeDescription) {
NSArray *outputs = [routeDescription outputs]; // 输入源
if (outputs && 0 < [outputs count]) {
AVAudioSessionPortDescription *portDescription = [outputs objectAtIndex:0];
NSString *portType = [portDescription portType];
NSLog(@"PortType: %@", portType); // 蓝牙开启未链接: Speaker && 链接耳机: BluetoothA2DPOutput BluetoothHFP BluetoothHSP
if (portType && [portType isEqualToString:@"BluetoothA2DPOutput"]) {
NSLog(@"[蓝牙检测] - 状态 - 输出 - %@", [portDescription portName]);
return portDescription;
} else if (portType && [portType isEqualToString:@"BluetoothHFP"] && [portType isEqualToString:@"BluetoothHSP"]) {
NSLog(@"[蓝牙检测] - 状态 - 输出 & 输入 - %@", [portDescription portName]);
return portDescription;
}
}
}
return nil;
}
CoreBluetooth Detección en tiempo real del estado de conmutación de Bluetooth
Lo anterior es todo el contenido compartido esta vez, ¡espero que pueda ser de ayuda para todos!