日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[iOS]iOS AudioSession详解 Category选择 听筒扬声器切换

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [iOS]iOS AudioSession详解 Category选择 听筒扬声器切换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在你讀這篇文章之前,如果你不嫌讀英文太累,推薦閱讀下蘋果iOS Human Interface Guidelines中Sound這一章。


選擇一個Category

AVAudioSessionCategoryAmbient?或?kAudioSessionCategory_AmbientSound

——用于非以語音為主的應用,使用這個category的應用會隨著靜音鍵和屏幕關閉而靜音。并且不會中止其它應用播放聲音,可以和其它自帶應用如iPod,safari等同時播放聲音。注意:該Category無法在后臺播放聲音

AVAudioSessionCategorySoloAmbient?或?kAudioSessionCategory_SoloAmbientSound

——類似于AVAudioSessionCategoryAmbient?不同之處在于它會中止其它應用播放聲音。 這個category為默認category。該Category無法在后臺播放聲音

AVAudioSessionCategoryPlayback?或?kAudioSessionCategory_MediaPlayback

——用于以語音為主的應用,使用這個category的應用不會隨著靜音鍵和屏幕關閉而靜音。可在后臺播放聲音

AVAudioSessionCategoryRecord?或?kAudioSessionCategory_RecordAudio

———用于需要錄音的應用,設置該category后,除了來電鈴聲,鬧鐘或日歷提醒之外的其它系統聲音都不會被播放。該Category只提供單純錄音功能。

AVAudioSessionCategoryPlayAndRecord?或?kAudioSessionCategory_PlayAndRecord

——用于既需要播放聲音又需要錄音的應用,語音聊天應用(如微信)應該使用這個category。該Category提供錄音和播放功能。如果你的應用需要用到iPhone上的聽筒,該category是你唯一的選擇,在該Category下聲音的默認出口為聽筒(在沒有外接設備的情況下)。


注意:并不是一個應用只能使用一個category,程序應該根據實際需要來切換設置不同的category,舉個例子,錄音的時候,需要設置為AVAudioSessionCategoryRecord,當錄音結束時,應根據程序需要更改category為AVAudioSessionCategoryAmbient,AVAudioSessionCategorySoloAmbientAVAudioSessionCategoryPlayback中的一種。


設置Category

[objc]?view plaincopy
  • NSError?*setCategoryError?=?nil;??
  • BOOL?success?=?[[AVAudioSession?sharedInstance]??
  • ????????????????setCategory:?AVAudioSessionCategoryAmbient??
  • ????????????????error:?&setCategoryError];??
  • ??
  • if?(!success)?{?/*?handle?the?error?in?setCategoryError?*/?}??

  • Activate & Deactivate AudioSession

    [objc]?view plaincopy
  • NSError?*error?=?nil;??
  • AVAudioSession?*audioSession?=?[AVAudioSession?sharedInstance];??
  • BOOL?ret?=?[audioSession?setActive:YES?error:&error];??
  • if?(!ret)??
  • {??
  • ????NSLog(@"%s?-?activate?audio?session?failed?with?error?%@",?__func__,[error?description]);??
  • }??

  • [objc]?view plaincopy
  • NSError?*error?=?nil;??
  • AVAudioSession?*audioSession?=?[AVAudioSession?sharedInstance];??
  • //Note:?Set?AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation?to?resume?other?apps'?audio.??
  • BOOL?ret?=?[audioSession?setActive:NO?withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation?error:&error];??
  • if?(!ret)??
  • {??
  • }??



  • Audio Route的選擇

    當你的iPhone接有多個外接音頻設備時(耳塞,藍牙耳機等),AudioSession將遵循last-in wins的原則來選擇外接設備,即聲音將被導向最后接入的設備。

    當沒有接入任何音頻設備時,一般情況下聲音會默認從揚聲器出來,但有一個例外的情況:PlayAndRecord這個category下,聽筒會成為默認的輸出設備。如果你想要改變這個行為,可以提供MPVolumeView來讓用戶切換到揚聲器,也可通過overrideOutputAudioPort方法來programmingly切換到揚聲器,也可以修改category option為AVAudioSessionCategoryOptionDefaultToSpeaker。


    PlayandRecord下切換到揚聲器

    除了讓用戶手動選擇,你也可以通過以下兩種方法在程序里進行切換

    1. 修改Category的默認行為:

    [objc]?view plaincopy
  • [audioSession?setCategory:AVAudioSessionCategoryPlayAndRecord?withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker?error:&error];??
  • 2. OverrideOutputAudioPort:

    [objc]?view plaincopy
  • [audioSession?overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker?error:&error];??
  • 關于這兩種方法的區別 這篇文章 中有詳細的說明。

    總結

    以上是生活随笔為你收集整理的[iOS]iOS AudioSession详解 Category选择 听筒扬声器切换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。