在我的应用程序中,我记录用户说的内容并将其转发给他们。
我将类别设置为允许播放和录制以及蓝牙设备:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:& error];
我订阅了通知 - AVAudioSessionRouteChangeNotification
当蓝牙设备断开连接并重新连接时,我可以看到routeChangeReason:AVAudioSessionRouteChangeReasonCategoryChange
我可以看到端口类型是BluetoothHFP,这很好。
但是在路线更改原因之后几秒钟还有另一个通知: AVAudioSessionRouteChangeReasonOverride
然后它切换回内置的ipad麦克风,但扬声器仍与蓝牙设备保持一致?
为什么要覆盖?
答案 0 :(得分:0)
我能够通过检查是否连接了蓝牙设备从覆盖中恢复然后将其设置为首选输入来解决此问题:
NSArray *availInputs = [[AVAudioSession sharedInstance] availableInputs];
int count = [availInputs count];
for (int i = 0; i < count; i++) {
AVAudioSessionPortDescription* inPort = [availInputs objectAtIndex:i];
if([inPort.portType isEqualToString:@"BluetoothHFP"]) {
NSError *setPreferredErr = nil;
[[AVAudioSession sharedInstance] setPreferredInput:inPort error:&setPreferredErr];
if(setPreferredErr)
NSLog (@"connectToBlueToothDeviceIfAvailable setPreferredInput:%@", setPreferredErr);
}
}