鍍金池/ 教程/ iOS/ 聲音(Sound)
錢包
iCloud
控件
適應(yīng)性和布局
編輯菜單(Edit Menu)
從概念到產(chǎn)品
啟動(dòng)與停止
3D 觸摸
VoiceOver
Live Photos
HomeKit
臨時(shí)視圖
游戲中心(Game Center)
快速查看(Quick Look)
交互性與反饋
與 iOS 的整合
鍵盤和輸入頁(yè)面(Keyboards and Input Views)
iAd 富媒體廣告(iAd Rich Media Ads)
術(shù)語(yǔ)和措辭
HealthKit
案例學(xué)習(xí):從桌面到 iOS
導(dǎo)航
撤銷與重做(Undo and Redo)
研究型應(yīng)用程序
社交媒體
蘋果的移動(dòng)支付平臺(tái)
圖標(biāo)和圖形
iOS 應(yīng)用解析
為 iOS 而設(shè)計(jì)
路線選擇(Routing)
設(shè)計(jì)原則
應(yīng)用內(nèi)購(gòu)買服務(wù)(In-App Purchase)
品牌推廣
動(dòng)畫(huà)
聲音(Sound)
多任務(wù)處理
內(nèi)容視圖
應(yīng)用擴(kuò)展
通知
訪問(wèn)用戶數(shù)據(jù)(Accessing User Data)
無(wú)線打印 (AirPrint)
模態(tài)情境
顏色與字體

聲音(Sound)

無(wú)論聲音在你的應(yīng)用中是主要體驗(yàn)的一環(huán),還是錦上添花的元素,你都需要知道用戶對(duì)聲音表現(xiàn)的期望以及與如何滿足這些期望。

理解用戶期望(Understand User Expectations)

人們可以使用設(shè)備控件來(lái)調(diào)整聲音,他們還可能使用有線或無(wú)線的耳機(jī)和聽(tīng)筒。人們也會(huì)對(duì)于他們的行為如何作用于他們聽(tīng)到的聲音有各種各樣的期望。雖然你可能會(huì)發(fā)現(xiàn)有一些期望很讓人意外,但它們都會(huì)遵循用戶控制的原則,即應(yīng)是用戶而非設(shè)備掌控聽(tīng)到聲音的時(shí)機(jī)。

用戶會(huì)依據(jù)需要將設(shè)備靜音:

  • 避免被突兀的音效打斷,比如手機(jī)鈴聲和信息接收音等
  • 避免聽(tīng)到用戶操作所產(chǎn)生的副產(chǎn)品的聲音,比如鍵盤或其他反饋音、偶然的聲音或應(yīng)用啟動(dòng)的聲音
  • 避免聽(tīng)到那些在玩游戲時(shí)非必要出現(xiàn)的聲音,如音效和配樂(lè) 例如,在劇院中,用戶將他們的設(shè)備調(diào)至靜音以避免打擾劇院中的其他人。在這一情境下,用戶仍然希望能在他們的設(shè)備上使用應(yīng)用,但他們不希望被無(wú)預(yù)期或突兀的聲音所打斷,如手機(jī)鈴聲或新消息音。

當(dāng)用戶操作的明確目的就是聽(tīng)到聲音時(shí),鈴音/靜音開(kāi)關(guān)(或靜音開(kāi)關(guān))不會(huì)屏蔽這些操作所產(chǎn)生的聲音。例如:

  • 在僅有媒體播放功能的應(yīng)用中的進(jìn)行媒體播放是不會(huì)被靜音的,因?yàn)椴シ琶襟w是用戶明確期望的。
  • 鬧鐘不能被靜音,因?yàn)轸[鐘是用戶明確設(shè)定使用的。
  • 語(yǔ)言學(xué)習(xí)應(yīng)用中的音效素材不能被靜音,因?yàn)橛脩暨M(jìn)行了明確的操作希望聽(tīng)到它。
  • 音頻對(duì)話應(yīng)用中的對(duì)話不被靜音,因?yàn)橛脩舸蜷_(kāi)這個(gè)應(yīng)用的唯一目的就是進(jìn)行音頻對(duì)話。 用戶使用設(shè)備音量調(diào)節(jié)按鍵可調(diào)節(jié)他們的設(shè)備所能發(fā)出的所有聲音的音量,包括歌曲、應(yīng)用音效和設(shè)備聲音。不管鈴聲/靜音(或靜音)的開(kāi)關(guān)在什么位置,用戶都能使用音量調(diào)節(jié)按鍵屏蔽所有聲音,使用音量調(diào)節(jié)按鍵調(diào)節(jié)應(yīng)用當(dāng)前所播放的音頻時(shí)同樣調(diào)整了全局系統(tǒng)的音量,鈴聲音量除外。

    對(duì)于 iPhone:當(dāng)沒(méi)有音頻播放時(shí)使用音量鍵可以調(diào)整鈴聲音量。

用戶使用耳機(jī)的目的在于能夠私密地收聽(tīng)聲音以及解放他們的雙手。不管這些配件是有線的還是無(wú)線的,用戶對(duì)這個(gè)體驗(yàn)都有特定的期待。

當(dāng)用戶插入耳機(jī)或連接無(wú)線音頻設(shè)備時(shí),他們期望能以私密的狀態(tài)繼續(xù)收聽(tīng)當(dāng)前播放的音頻。因此,他們希望應(yīng)用能夠不中斷地繼續(xù)播放當(dāng)前正在播放的音頻。

當(dāng)用戶拔出耳機(jī)或斷開(kāi)與無(wú)線設(shè)備的連接時(shí)(抑或設(shè)備超出范圍或關(guān)閉時(shí)),他們不希望他們剛剛收聽(tīng)的內(nèi)容被自動(dòng)地與他人分享。因此,他們希望正在播放音頻的應(yīng)用暫停播放,讓他們能夠在自己想要繼續(xù)播放的時(shí)候再開(kāi)啟。

定義應(yīng)用的音頻行為(Define the Audio Behavior of Your App)

如果必要的話,你可以通過(guò)調(diào)整相關(guān)的、獨(dú)立的音量水平以在你的應(yīng)用中制造最好的混音輸出效果。但最終音效輸出的音量也應(yīng)該能由系統(tǒng)音量控制,可以通過(guò)音量鍵或音量滑塊進(jìn)行調(diào)節(jié)。這意味著應(yīng)用的音頻輸出的控制權(quán)仍然歸屬在用戶手中。

確保你的應(yīng)用能適時(shí)地顯示音頻路徑選擇。(音頻路徑(audio route)是指音頻信號(hào)的電子通路,例如從設(shè)備到耳機(jī)或是從設(shè)備到揚(yáng)聲器。)即使人們沒(méi)有物理性的插入或拔出音頻設(shè)備,他們也仍希望能選擇其他不同的音頻路徑。為了實(shí)現(xiàn)這一訴求,iOS 能自動(dòng)顯示可讓用戶選擇輸出音頻路徑的控件(使用 MPVolumeView 類能允許這個(gè)控件顯示在你的應(yīng)用中)。由于選擇不同的音頻路徑是用戶主動(dòng)的行為,用戶期望當(dāng)前播放的音頻能繼續(xù)不中斷。

如果你需要顯示音量滑塊,在使用 MPVolumeView 類時(shí),確保使用的是系統(tǒng)提供的可用的音量滑塊。注意,當(dāng)正在使用的音頻輸出設(shè)備不支持音量控制時(shí),音量滑塊會(huì)被合適的設(shè)備名稱所替代。

如果你的應(yīng)用只產(chǎn)生一些與其功能無(wú)必要關(guān)系的界面音效時(shí),(盡量)使用系統(tǒng)音效服務(wù)(System Sound Services)。系統(tǒng)音效服務(wù)是一種能產(chǎn)生警示音、界面音效和發(fā)出振動(dòng)的 iOS 技術(shù);它不適合任何其他用途。當(dāng)你使用系統(tǒng)音效服務(wù)(System Sound Services)來(lái)產(chǎn)生音效時(shí),你不能干涉你的音頻與設(shè)備的音頻的交互方式,也不能干涉它處理干擾和設(shè)備配置變化的方式。想了解如何使用這一技術(shù),請(qǐng)參閱 Audio UI Sounds (SysSound)中的范例項(xiàng)目。

如果音效在你的應(yīng)用中扮演重要的角色,使用音頻會(huì)話服務(wù)(Audio Session Services)或是 AVAudioSession 類。這些程序接口不產(chǎn)生音效;相反,它們會(huì)幫助你了解你的音頻應(yīng)該如何與設(shè)備的音頻進(jìn)行交互以及如何響應(yīng)設(shè)備配置的干擾與變化。

對(duì)于 iPhone:無(wú)論你使用什么樣的技術(shù)來(lái)制作音頻,無(wú)論你如何定義來(lái)它的行為,電話總是可以中斷當(dāng)前運(yùn)行的應(yīng)用。這是因?yàn)槿魏螒?yīng)用都不應(yīng)該阻止人們接收來(lái)電。

在音頻會(huì)話服務(wù)(Audio Session Service)中,音頻會(huì)話(audio session)執(zhí)行了你的應(yīng)用與系統(tǒng)之間音頻中介的功能。音頻會(huì)話中最重要的方面之一就是類目(category),它定義了你的應(yīng)用的音頻行為。

為了實(shí)現(xiàn)音頻會(huì)話服務(wù)帶來(lái)的好處并提供用戶期望的音頻體驗(yàn),你需要選擇可以完美描述應(yīng)用音頻行為的類目(category)。具體情況取決于你的應(yīng)用只在前臺(tái)播放音頻還是也要在后臺(tái)播放音頻。在你做這一選擇的時(shí)候,遵循以下這些原則:

  • 依據(jù)其語(yǔ)義而非精確的行為來(lái)選擇音頻會(huì)話類目。通過(guò)選擇目的清晰的類目,你可以確保你的應(yīng)用能表現(xiàn)得符合用戶期望。除此之外,當(dāng)以后行為的精確集合被重新定義時(shí),它可以為你的應(yīng)用提供最佳的機(jī)會(huì)使其合理運(yùn)行。
  • 在極少數(shù)情況下,可以添加屬性到音頻會(huì)話中以修正一個(gè)類別的標(biāo)準(zhǔn)行為。一個(gè)類別的標(biāo)準(zhǔn)行為代表多數(shù)用戶的期望,因此在你改變那個(gè)行為之前你應(yīng)該仔細(xì)地考慮。例如,你可以添加閃避(ducking)屬性以確保你的音頻聲音能比其他所有的音頻都大(除了電話音頻),如果這就是用戶所期望的。(欲了解更多關(guān)于音頻會(huì)話屬性的內(nèi)容, 請(qǐng)參見(jiàn)的 Fine-Tuning the Category。)
  • 依據(jù)設(shè)備當(dāng)前的音頻環(huán)境來(lái)考慮你的類目選擇。這應(yīng)該是合理的,舉個(gè)例子,用戶可以在使用你的應(yīng)用的同時(shí)聽(tīng)其他音頻而非你的配樂(lè)。如果要這樣做,須確保避免當(dāng)你的應(yīng)用啟動(dòng)時(shí),迫使用戶停止收聽(tīng)當(dāng)前的內(nèi)容或要需要額外地在兩者之間做出選擇。
  • 通常情況下,避免在你的應(yīng)用運(yùn)行時(shí)改變類目。改變類目的首要依據(jù)是你的應(yīng)用是否需要在不同的時(shí)機(jī)支持錄音和播放。在這種情況下,更好的選擇是依據(jù)需要在錄音類目與播放類目之間轉(zhuǎn)換,而非同時(shí)選擇播放和錄音類目。這是因?yàn)檫x擇錄音類目可以確保正在錄音時(shí)不會(huì)聽(tīng)到提示音,比如收到信息的提示音。 表35-1列舉了你可以使用的音頻會(huì)話類目。不同的類目可以允許通過(guò)鈴聲/靜音開(kāi)關(guān)或靜音開(kāi)關(guān)(或設(shè)備鎖)來(lái)實(shí)現(xiàn)靜音、與其他的音頻混合或者控制應(yīng)用在后臺(tái)播放。(欲了解編程界面上所呈現(xiàn)的類目和屬性的準(zhǔn)確名稱,請(qǐng)參見(jiàn) Audio Session Programming Guide.)

表35-1 音頻會(huì)話類目及其相關(guān)行為

http://wiki.jikexueyuan.com/project/ios-9-human-computer-interface-guidelines/images/213.png" alt="" />

*如果你選擇音頻處理類目并且你希望在后臺(tái)運(yùn)行音頻進(jìn)程,你需要在完成音頻處理之前防止你的應(yīng)用被暫停。欲了解如何實(shí)現(xiàn)這一功能,參見(jiàn)《iOS 應(yīng)用編程指南》中的執(zhí)行長(zhǎng)時(shí)間運(yùn)行的后臺(tái)任務(wù)。

以下是一些示例情境,其中指示了如何選擇音頻會(huì)話類目以提供用戶喜歡的音頻體驗(yàn)。

情境1:一個(gè)幫助人們學(xué)習(xí)新語(yǔ)言的教育類應(yīng)用。你需要提供:

  • 用戶點(diǎn)擊特定控件時(shí)播放反饋音效
  • 當(dāng)用戶想聽(tīng)到正確發(fā)音的示例時(shí)播放字詞的錄音

在這個(gè)應(yīng)用中,聲音對(duì)于主要功能是十分重要的。人們使用這個(gè)應(yīng)用來(lái)聽(tīng)他們正學(xué)習(xí)的語(yǔ)言的詞語(yǔ)與短語(yǔ),因此即使當(dāng)設(shè)備鎖定或者被調(diào)至靜音時(shí)也要能播放聲音。因?yàn)橛脩粜枰逦芈?tīng)到聲音,他們會(huì)期望其他他們可能播放的音頻都被靜音。

為了滿足用戶對(duì)于該應(yīng)用所期望的音頻體驗(yàn),你應(yīng)該使用播放(Playback )類目。雖然這一類目可以被定義為與其他音頻混合,但該應(yīng)用應(yīng)該使用默認(rèn)的行為以確保其他的音頻不會(huì)干擾那些用戶明確選擇聽(tīng)到的教育性內(nèi)容。

場(chǎng)景2:網(wǎng)絡(luò)協(xié)議電話(VoIP)應(yīng)用。你需要提供:

  • 接收音頻輸入的能力
  • 播放音頻的能力

在該應(yīng)用中,聲音對(duì)于主要功能是十分重要的。人們經(jīng)常會(huì)在使用另一個(gè)應(yīng)用時(shí)使用該應(yīng)用與他人進(jìn)行交流。用戶期望能在他們將設(shè)備調(diào)至靜音或設(shè)備被鎖定時(shí)接聽(tīng)電話,他們希望在來(lái)電期間其他音頻被靜音。他們也希望應(yīng)用在后臺(tái)運(yùn)行時(shí)也能繼續(xù)打電話。

為了滿足用戶對(duì)于該應(yīng)用所期望的音頻體驗(yàn),你應(yīng)該使用播放和錄音(Play and Record)類目,并且你要確保只有在你需要時(shí)才會(huì)激活你的音頻會(huì)話,以便用戶可以在打電話過(guò)程中使用其他音頻。

場(chǎng)景3:允許用戶在不同任務(wù)中操作角色的游戲。你需要提供:

  • 不同的游戲運(yùn)行音效
  • 配樂(lè)

在該應(yīng)用中,聲音會(huì)在很大程度上提升用戶體驗(yàn),但對(duì)于主任務(wù)并沒(méi)有那么重要。而且,用戶可能會(huì)希望能在玩游戲時(shí)靜音或聽(tīng)他們樂(lè)單中的歌曲而不聽(tīng)游戲配樂(lè)。

最好的策略是在你的應(yīng)用啟動(dòng)時(shí)確定用戶是否在收聽(tīng)其他音頻。不要要求用戶選擇他們是要收聽(tīng)其他音頻或是你的音效。而應(yīng)該使用音頻會(huì)話功能中的 AudioSessionGetProperty 來(lái)請(qǐng)求 kAudioSessionProperty_OtherAudioIsPlaying 屬性的狀態(tài)。依據(jù)所請(qǐng)求的答案,你可以選擇環(huán)境(Ambient)或是個(gè)人環(huán)境(Solo Ambient)類目(這兩種類目都允許用戶靜音玩游戲):

  • 如果用戶正在聽(tīng)其他音頻,你應(yīng)該假設(shè)他們想要繼續(xù)聽(tīng)并且不想被強(qiáng)迫收聽(tīng)游戲音效。在這種情境下,你最好選擇環(huán)境(Ambient)類目。
  • 如果用戶在你的應(yīng)用啟動(dòng)時(shí)沒(méi)有在收聽(tīng)其他音效,你最好選擇個(gè)人環(huán)境(SoloAmbient)類目。

情境4:一個(gè)為用戶到達(dá)目的地提供準(zhǔn)確、實(shí)時(shí)導(dǎo)航指示的應(yīng)用。你需要提供:

  • 路途中每一步的語(yǔ)音指示
  • 一些反饋音效
  • 支持用戶繼續(xù)收聽(tīng)他們自己的音頻的能力

在該應(yīng)用中,無(wú)論應(yīng)用是否是在后臺(tái)運(yùn)行,語(yǔ)音導(dǎo)航指示都表現(xiàn)為主要任務(wù)?;谶@一原因,你最好使用播放(Playback)類目,它允許你的音頻在設(shè)備被鎖定、靜音或是在后臺(tái)運(yùn)行時(shí)仍可以播放。

你可以通過(guò)添加 kAudioSessionProperty_OverrideCategoryMixWithOthers 屬性來(lái)實(shí)現(xiàn)允許人們?cè)谑褂媚愕膽?yīng)用時(shí)收聽(tīng)其他音頻。但是你也想要確保用戶在他們正在播放其他音頻時(shí)能聽(tīng)到語(yǔ)音提示。你可以為音頻會(huì)話添加 kAudioSessionProperty_OtherMixableAudioShouldDuck 屬性來(lái)確保你的音頻比其他音頻的聲音更大( iPhone 上的電話音頻除外)。這些設(shè)置允許應(yīng)用在后臺(tái)運(yùn)行時(shí)也可以恢復(fù)音頻會(huì)話,可以確保用戶能獲得實(shí)時(shí)更新的導(dǎo)航。

情境5:一個(gè)允許用戶上傳文本和圖片到網(wǎng)站上的博客應(yīng)用。你需要提供:

  • 簡(jiǎn)短的啟動(dòng)音效文件
  • 伴隨用戶行為產(chǎn)生的各式各樣的短音效(例如當(dāng)郵件被上傳后播放的音效)
  • 發(fā)送失敗時(shí)播放的提示音

在該應(yīng)用中,聲音提升了用戶體驗(yàn),但也不是必需的。主任務(wù)與音頻并沒(méi)有關(guān)系,用戶也不是必須要通過(guò)收聽(tīng)聲音才能成功使用應(yīng)用。在這一情境中,你最好使用系統(tǒng)聲音服務(wù)來(lái)產(chǎn)生聲音。這是因?yàn)檫@個(gè)應(yīng)用中所有聲音的音頻情境都符合本技術(shù)想要達(dá)到的目的,也就是說(shuō)應(yīng)制作符合用戶所期待的、能通過(guò)設(shè)備和鈴聲/靜音(或靜音)開(kāi)關(guān)來(lái)調(diào)節(jié)的界面音效和提示音。

管理音頻中斷(Manage Audio Interruptions)

有時(shí)候,當(dāng)前播放的音頻會(huì)被來(lái)自于不同應(yīng)用的音頻所打斷。舉個(gè)例子,在 iPhone 上,來(lái)電會(huì)持續(xù)中斷當(dāng)前應(yīng)用的音頻。在多任務(wù)情境中,這種音頻中斷的頻率可能會(huì)很高。

為了提供用戶喜歡的音頻體驗(yàn),iOS 系統(tǒng)依賴于你能做到下面幾點(diǎn):

  • 識(shí)別可能會(huì)引起應(yīng)用中斷的音頻類型
  • 當(dāng)應(yīng)用在音頻中斷結(jié)束后繼續(xù)運(yùn)行時(shí)進(jìn)行合理地反饋

每個(gè)應(yīng)用需要識(shí)別會(huì)引起音頻中斷的類型,但不是每個(gè)應(yīng)用都需要決定如何在音頻中斷結(jié)束后進(jìn)行反饋。這是因?yàn)槎鄶?shù)類型的應(yīng)用應(yīng)在音頻中斷結(jié)束后恢復(fù)音頻。只有那些主要或部分由媒體播放組成(以及提供媒體播放控制)的應(yīng)用,才必須用額外的步驟來(lái)決定什么是合適的反饋。

從概念上講,基于中斷當(dāng)前音頻的音頻類型以及中斷結(jié)束后用戶所期望的特定的應(yīng)用反饋方式,有兩種類型的音頻中斷:

  • 可恢復(fù)性中斷是(resumable interruption)被用戶視為臨時(shí)穿

插在他們的主要聆聽(tīng)體驗(yàn)中的音頻引起的。 在可恢復(fù)性中斷結(jié)束后,有媒體播放控件的應(yīng)用應(yīng)該恢復(fù)它被中斷前的任務(wù),無(wú)論是繼續(xù)播放音頻還是保持暫停。沒(méi)有媒體播放控件的應(yīng)用則應(yīng)該恢復(fù)播放音頻。

舉個(gè)例子,試想用戶在 iPhone 上使用應(yīng)用播放音樂(lè)時(shí),在播一首歌的中間來(lái)了一個(gè)網(wǎng)絡(luò)電話。用戶接起了電話,期望在他們通話時(shí)播放的應(yīng)用能靜音。在通話結(jié)束后,用戶希望播放的應(yīng)用自動(dòng)恢復(fù)播放歌曲,因?yàn)橐魳?lè)而非電話才是他們的主要聆聽(tīng)體驗(yàn),而他們?cè)陔娫捊尤肭耙矝](méi)有暫停音樂(lè)。另一方面,如果用戶在電話接入前暫停了音樂(lè)播放,他們會(huì)希望電話結(jié)束后音樂(lè)仍保持暫停。

其他能引起可恢復(fù)性中斷的應(yīng)用的例子還有那些具備鬧鐘、音頻提示(例如語(yǔ)音方向指示)或其他間歇性音頻功能的應(yīng)用。

  • 不可恢復(fù)中斷(nonresumable interruption)是由那些被用戶

視為首要聽(tīng)覺(jué)體驗(yàn)的音頻所引起的,比如媒體播放產(chǎn)生的音頻。在不可恢復(fù)中斷結(jié)束后,顯示媒體播放控件的應(yīng)用不應(yīng)該恢復(fù)播放原來(lái)的音頻。而沒(méi)有媒體播放控件的應(yīng)用應(yīng)該恢復(fù)播放音頻。例如,假設(shè)用戶正在收聽(tīng)一個(gè)音樂(lè)播放應(yīng)用(音樂(lè)應(yīng)用1),此時(shí)另一個(gè)音樂(lè)播放應(yīng)用(音樂(lè)應(yīng)用2)打斷了它。用戶終止后決定收聽(tīng)音樂(lè)應(yīng)用2一段時(shí)間。在退出音樂(lè)應(yīng)用2之后,用戶不想要音樂(lè)應(yīng)用1自動(dòng)恢復(fù)播放,因?yàn)榇藭r(shí)他們主動(dòng)將音樂(lè)應(yīng)用2作為首要的聽(tīng)覺(jué)體驗(yàn)。 下面的指南可以幫助你決定當(dāng)一個(gè)音頻中斷后如何繼續(xù)以及提供什么信息:

確定由你的應(yīng)用引起的音頻中斷的類型。在你的音頻結(jié)束時(shí),你可以通過(guò)以下任意一種方式去禁用你的音頻會(huì)話來(lái)做到這一點(diǎn):

  • 如果你的應(yīng)用引起了一個(gè)可恢復(fù)性中斷,使用 AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation 標(biāo)識(shí)禁用你的音頻會(huì)話。
  • 如果你的應(yīng)用引起了一個(gè)不可恢復(fù)中斷,不用任何標(biāo)識(shí)就可以禁用你的音頻會(huì)話。 無(wú)論提供與否,標(biāo)識(shí)會(huì)在適宜的情況下允許iOS系統(tǒng)賦予被中斷的應(yīng)用自動(dòng)恢復(fù)播放它們的音頻的能力。

決定是否應(yīng)該在一個(gè)音頻中斷結(jié)束后恢復(fù)音頻。你應(yīng)依據(jù)你應(yīng)用中所提供的音頻體驗(yàn)來(lái)做這一決斷。

  • 如果你的應(yīng)用給用戶呈現(xiàn)了用于播放或暫停音頻的媒體播放控件,你需要在一個(gè)音頻中斷結(jié)束后檢查AVAudioSessionInterruptionFlags_ShouldResume標(biāo)識(shí),如果你的應(yīng)用接受應(yīng)該恢復(fù)(Should Resume)標(biāo)識(shí),你的應(yīng)用應(yīng)該:
  • 恢復(fù)播放音頻(你的應(yīng)用被打斷時(shí)在主動(dòng)播放音頻)
    • 不恢復(fù)播放音頻(你的應(yīng)用被打斷時(shí)沒(méi)有在主動(dòng)播放音頻)
  • 如果你的應(yīng)用沒(méi)有呈現(xiàn)任何用戶可用于播放或暫停音頻的媒體播放控件,你的應(yīng)用無(wú)論是否有“應(yīng)該恢復(fù)”標(biāo)識(shí),都始終應(yīng)在音頻中斷結(jié)束后恢復(fù)之前播放的音頻。例如,播放配樂(lè)的游戲應(yīng)該在被中斷后自動(dòng)恢復(fù)播放配樂(lè)。

適時(shí)處理媒體遠(yuǎn)程控制事件(Handle Media Remote Control Events, if Appropriate)

當(dāng)人們使用 iOS 媒體控制器或輔助控制器(如耳機(jī)線控)時(shí),應(yīng)用要能響應(yīng)遠(yuǎn)程控制。使你的應(yīng)用能接收來(lái)自于你的用戶界面之外的輸入,無(wú)論你的應(yīng)用當(dāng)前是在前臺(tái)還是后臺(tái)播放音頻。

應(yīng)用可以在播放媒體的過(guò)程中,通過(guò)后臺(tái)向支持 Airplay 的硬件(如 Apple TV)發(fā)送視頻。這樣的應(yīng)用可以接收通過(guò)遠(yuǎn)程控制事件實(shí)現(xiàn)的用戶輸入行為,因此用戶可以控制處于后臺(tái)運(yùn)行狀態(tài)的應(yīng)用中的視頻播放。除此之外,這類應(yīng)用在后臺(tái)運(yùn)行時(shí)也能恢復(fù)被中斷的音頻。

當(dāng)一個(gè)媒體播放應(yīng)用在后臺(tái)播放音頻或視頻時(shí),尤其需要合理響應(yīng)媒體遠(yuǎn)程控制事件。

當(dāng)你的應(yīng)用在后臺(tái)運(yùn)行時(shí),為了滿足與播放媒體特權(quán)相關(guān)的責(zé)任,要確保遵循以下這些原則:

限制你的應(yīng)用接收遠(yuǎn)程控制事件的次數(shù)。例如,當(dāng)你的應(yīng)用可以幫助用戶閱讀內(nèi)容、搜索信息或是收聽(tīng)音頻時(shí),它只有在用戶處于音頻場(chǎng)景中時(shí)才應(yīng)該接收遠(yuǎn)程控制事件。當(dāng)用戶脫離音頻情境時(shí),你應(yīng)該放棄接收事件的能力。如果你的應(yīng)用允許用戶在支持 AirPlay 的設(shè)備上播放音視頻,它應(yīng)該在媒體播放期間都可以接收遠(yuǎn)程控制事件。遵循這些原則能使用戶在你的應(yīng)用中處于非媒體情境中時(shí),通過(guò)耳機(jī)控制獲得另一個(gè)應(yīng)用的媒體體驗(yàn)。

盡可能地使用系統(tǒng)原生的控件以提供 AirPlay 支持。當(dāng)你使用 MPMoviePlayerController 類實(shí)現(xiàn) AirPlay 播放功能時(shí),你可以利用標(biāo)準(zhǔn)的控件使用戶可以選擇當(dāng)前范圍內(nèi)支持 AirPlay 的硬件?;蛘吣憧梢允褂?MPVolumeView 類來(lái)顯示用戶可選擇的支持 AirPlay 的音頻或視頻設(shè)備。用戶習(xí)慣于這些標(biāo)準(zhǔn)控件的外觀和行為,因此他們可以理解如何在你的應(yīng)用中使用它們。

不要改變事件的用途,即使這個(gè)事件在你的應(yīng)用中沒(méi)有意義。用戶期望 iOS 系統(tǒng)的所有應(yīng)用媒體控制和輔助控制能有功能上的統(tǒng)一。你不必實(shí)現(xiàn)你的應(yīng)用所不需要的那些事件,但你所實(shí)現(xiàn)的事件必須產(chǎn)生符合用戶期望的結(jié)果。如果你重新定義一個(gè)事件的意義,你會(huì)使用戶困惑并冒險(xiǎn)把他們帶入一個(gè)未知的狀態(tài),他們只能通過(guò)退出你的應(yīng)用來(lái)逃離。