iOS AVAudioSessionRouteChangeReasonOverride:麦克风默认回内置 ipad 麦克风
Posted
技术标签:
【中文标题】iOS AVAudioSessionRouteChangeReasonOverride:麦克风默认回内置 ipad 麦克风【英文标题】:iOS AVAudioSessionRouteChangeReasonOverride: Mic defaults back to inbuilt ipad mic 【发布时间】:2015-08-13 16:30:40 【问题描述】:在我的应用中,我会记录用户所说的内容并将其转发给他们。
我这样设置类别以允许播放和录制以及蓝牙设备:
[[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionAllowBluetooth 错误:&error];
我订阅了通知 - AVAudioSessionRouteChangeNotification
当蓝牙设备断开并重新连接时,我可以看到 routeChangeReason : AVAudioSessionRouteChangeReasonCategoryChange
我可以看到端口类型是蓝牙HFP,这很好。
但是在路由更改原因几秒钟后又有另一个通知: AVAudioSessionRouteChangeReasonOverride
然后它切换回内置的 ipad 麦克风,但扬声器与蓝牙设备保持一致?
为什么会发生覆盖?
【问题讨论】:
【参考方案1】:我可以通过检查是否连接了蓝牙设备然后将其设置为首选输入来从覆盖中恢复来解决此问题:
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);
【讨论】:
以上是关于iOS AVAudioSessionRouteChangeReasonOverride:麦克风默认回内置 ipad 麦克风的主要内容,如果未能解决你的问题,请参考以下文章