下午研究了一下揚聲器聽筒切換
如果需要保持插拔耳機之前的狀態可以用我總結的代碼:如果插耳機之前是揚聲器,拔了之後還保存揚聲器狀態。
if (判斷條件) {
// 揚聲器
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
} else {
// 聽筒
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
}
如果不需要:(enable是判斷條件)
[[AVAudioSession sharedInstance] overrideOutputAudioPort:enable ? AVAudioSessionPortOverrideSpeaker:AVAudioSessionPortOverrideNone error:nil];
原文:http://blog.csdn.net/vieri_ch/article/details/43733375
本文部分翻譯了官方對這兩個屬性的描述。鏈接如下,此外加入個人的使用體會
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 ,
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
方法1,設置之後,如果此時插入耳機,在拔掉。播放的聲音會從聽筒輸出,而不是回到揚聲器
方法2. 設置之後,始終輸出到揚聲器,而不是其他接收器,如果沒有耳機。(簡要的說,就是如果有個藍牙音箱,哪怕接上都不會有聲音輸出到藍牙音響,插上耳機,則會有聲音輸出到耳機。)
這裡有個很重要的地方。這兩個屬性都只被用於。AVAudioSessionCategoryPlayAndRecord
使用場景的補充
如果在某個場景下,希望強制從speaker輸出聲音,最好使用
AVAudioSessionCategoryPlayback
, 而不是 AVAudioSessionCategoryPlayAndRecord ,因為後者默認從聽筒輸出。無外接設備的情況。
[session setCategory:AVAudioSessionCategoryPlayback
error:&error];
需要使用揚聲器和聽筒切換場景,用
AVAudioSessionCategoryPlayAndRecord
使用聽筒之後,PlayandRecord下切換到揚聲器
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
這篇也有一定參考價值:
http://blog.csdn.net/xdrt81y/article/details/38926663