1-選擇一個Category
AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound
——用于非以語音為主的應(yīng)用菇肃,使用這個category的應(yīng)用會隨著靜音鍵和屏幕關(guān)閉而靜音奴饮。并且不會中止其它應(yīng)用播放聲音,可以和其它自帶應(yīng)用如iPod缝龄,safari等同時播放聲音寨闹。注意:該Category無法在后臺播放聲音
AVAudioSessionCategorySoloAmbient 或 kAudioSessionCategory_SoloAmbientSound
——類似于AVAudioSessionCategoryAmbient 不同之處在于它會中止其它應(yīng)用播放聲音胶坠。 這個category為默認(rèn)category。該Category無法在后臺播放聲音
AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback
——用于以語音為主的應(yīng)用繁堡,使用這個category的應(yīng)用不會隨著靜音鍵和屏幕關(guān)閉而靜音涵但。可在后臺播放聲音
AVAudioSessionCategoryRecord 或 kAudioSessionCategory_RecordAudio
———用于需要錄音的應(yīng)用帖蔓,設(shè)置該category后矮瘟,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統(tǒng)聲音都不會被播放塑娇。該Category只提供單純錄音功能澈侠。
AVAudioSessionCategoryPlayAndRecord 或 kAudioSessionCategory_PlayAndRecord
——用于既需要播放聲音又需要錄音的應(yīng)用,語音聊天應(yīng)用(如微信)應(yīng)該使用這個category埋酬。該Category提供錄音和播放功能哨啃。如果你的應(yīng)用需要用到iPhone上的聽筒,該category是你唯一的選擇写妥,在該Category下聲音的默認(rèn)出口為聽筒(在沒有外接設(shè)備的情況下)拳球。
注意:
并不是一個應(yīng)用只能使用一個category,程序應(yīng)該根據(jù)實際需要來切換設(shè)置不同的category珍特,舉個例子祝峻,錄音的時候,需要設(shè)置為AVAudioSessionCategoryRecord扎筒,當(dāng)錄音結(jié)束時莱找,應(yīng)根據(jù)程序需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一種嗜桌。
2-Audio Route的選擇:
當(dāng)你的iPhone接有多個外接音頻設(shè)備時(耳塞奥溺,藍(lán)牙耳機等),AudioSession將遵循last-in wins的原則來選擇外接設(shè)備骨宠,即聲音將被導(dǎo)向最后接入的設(shè)備浮定。
當(dāng)沒有接入任何音頻設(shè)備時相满,一般情況下聲音會默認(rèn)從揚聲器出來,但有一個例外的情況:在PlayAndRecord
這個category下桦卒,聽筒會成為默認(rèn)的輸出設(shè)備立美。如果你想要改變這個行為,可以提供MPVolumeView來讓用戶切換到揚聲器闸盔,也可通過overrideOutputAudioPort方法來programmingly切換到揚聲器悯辙,也可以修改category option為AVAudioSessionCategoryOptionDefaultToSpeaker。
2.1 - PlayAndRecord的 category下切換到揚聲器方式:
除了讓用戶手動選擇迎吵,你也可以通過以下兩種方法在程序里進(jìn)行切換
方法1. 修改Category的默認(rèn)行為:
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];
方法2. OverrideOutputAudioPort: 方式
[audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]
例如:解決項目中的bug:當(dāng) category是 PlayAndRecord 情況下: