AVAudioSessionPortOverrideSpeaker 和 AVAudioSessionCategoryOptionDefaultToSpeaker區別,avaudiosession
本文部分翻譯了官方對這兩個屬性的描述。連結如下,此外加入個人的使用體會
https://developer.apple.com/library/ios/qa/qa1754/_index.html
問題的起源,在iOS中,播放聲音時,輸出到擴音器的需求。兩個屬性設定的區別
The difference is that setting the AVAudioSessionPortOverride by calling overrideOutputAudioPort: is more transient than using the category option AVAudioSessionCategoryOptionDefaultToSpeaker.
通過overrideOutputAudioPort這個方法設定,屬性AVAudioSessionPortOverride, 比使用AVAudioSessionCategoryOptionDefaultToSpeaker這個屬性更短暫
e.g
方法1
[session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error];
方法2
[session setCategory:AVAudioSessionCategoryPlayAndRecordwithOptions:AVAudioSessionCategoryOptionDefaultToSpeakererror:&error];
方法1,設定之後,如果此時插入耳機,在拔掉。播放的聲音會從耳機輸出,而不是回到擴音器
方法2. 設定之後,始終輸出到擴音器,而不是其他接收器,如果沒有耳機。(簡要的說,就是如果有個藍芽音箱,哪怕接上都不會有聲音輸出到藍芽音響,插上耳機,則會有聲音輸出到耳機。)
這裡有個很重要的地方。這兩個屬性都只被用於。AVAudioSessionCategoryPlayAndRecord