首页 文章

iOS AVAudioSessionRouteChangeReasonOverride:Mic默认回内置ipad麦克风

提问于
浏览
0

在我的应用程序中,我记录用户说的内容并将其转发给他们 .

我将类别设置为允许播放和录制以及蓝牙设备:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth error:&error];

我订阅了通知 - AVAudioSessionRouteChangeNotification

当蓝牙设备断开连接并重新连接时,我可以看到routeChangeReason:AVAudioSessionRouteChangeReasonCategoryChange

我可以看到端口类型是BluetoothHFP,这是好的 .

但是在路由更改原因之后的几秒钟之后会有另一个通知:AVAudioSessionRouteChangeReasonOverride

然后它切换回内置的ipad麦克风但扬声器仍与蓝牙设备保持一致?

覆盖为什么会发生?

1 回答

  • 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);
                }
            }
    

相关问题