[譯]《iOS Human Interface Guidelines》——Sound

聲音

無(wú)論聲音是你app用戶體驗(yàn)的主要部分還是一個(gè)可選的增益,你都要知道用戶對(duì)聲音有何期待以及如何滿足這些期待。

理解用戶的期待

用戶可以使用設(shè)備的控制來(lái)影響聲音,并且他們可能使用有線或無(wú)線的耳機(jī)。人們也對(duì)他們的行為如何影響他們聽(tīng)到的聲音抱有很多期待。雖然你可能會(huì)發(fā)現(xiàn)有些期待很驚人,但這都遵循用戶,而不是設(shè)備,決定的用戶控制。

當(dāng)用戶想要做如下事情的時(shí)候他們會(huì)使設(shè)備靜音:

  • 避免被不期待的聲音干擾,比如電話鈴聲和收到短信的聲音
  • 避免聽(tīng)到用戶行為副產(chǎn)品的聲音,比如鍵盤或其他反饋聲音、附帶聲音或者app啟動(dòng)聲音
  • 避免聽(tīng)到對(duì)使用游戲非必要的游戲聲音,比如音效和配樂(lè)

比如說(shuō),在電影院內(nèi)用戶使他們的設(shè)備靜音避免打擾到其他的人。在這種情況下,用戶依然想要在他們的設(shè)備上使用app,但不想被他們不期待或者請(qǐng)求明顯的聲音所驚嚇,比如鈴聲或者新短信聲。

靜音開(kāi)關(guān)不會(huì)關(guān)閉單獨(dú)由用戶動(dòng)作導(dǎo)致的和明確為了產(chǎn)生聲音的聲音。比如:

  • 一個(gè)只播放媒體的app中的媒體播放不會(huì)被靜音,因?yàn)槊襟w播放是明確被用戶請(qǐng)求的。
  • 鬧鐘不會(huì)被靜音,因?yàn)轸[鐘是明確被用戶設(shè)置的。
  • 語(yǔ)言學(xué)習(xí)app中的音效素材不會(huì)被靜音,因?yàn)橛脩裘鞔_要聽(tīng)到它。
  • 語(yǔ)音聊天app中的對(duì)話不會(huì)被靜音,因?yàn)橛脩魡?dòng)app的唯一目的就是進(jìn)行語(yǔ)音聊天。

用戶使用設(shè)備的音量按鈕來(lái)調(diào)整他們?cè)O(shè)備可以播放的所有聲音的音量,包括歌曲、app聲音和設(shè)備聲音。無(wú)論靜音開(kāi)關(guān)的位置在哪,用戶都可以使用音量按鈕來(lái)安靜任何聲音。使用音量按鈕來(lái)調(diào)整一個(gè)app當(dāng)前播放的音量同樣會(huì)調(diào)整所有系統(tǒng)的音量,包括鈴聲音量。

IPHONE
當(dāng)沒(méi)有聲音播放時(shí)使用音量按鈕會(huì)調(diào)整鈴聲音量。

用戶使用耳機(jī)來(lái)私下聽(tīng)聲音并解放他們的雙手。無(wú)論這些設(shè)備是有線的還是無(wú)線的,用戶都有著特殊的用戶體驗(yàn)的期待。

當(dāng)用戶插上耳機(jī),或者連接到一個(gè)無(wú)線聲音設(shè)備時(shí),他們想要繼續(xù)聽(tīng)到當(dāng)前的聲音,但是是私下的。因此,他們希望當(dāng)前正在播放聲音的app能夠不暫停地繼續(xù)播放。

當(dāng)用戶拔出耳機(jī),或者從一個(gè)無(wú)線設(shè)備斷開(kāi)連接(或者設(shè)備超出距離或者關(guān)閉)時(shí),他們不想自動(dòng)分享他們聽(tīng)的內(nèi)容給其他人。因此他們希望當(dāng)前正在播放聲音的app暫停,允許他們?cè)跍?zhǔn)備好的時(shí)候重新播放。

定義你app的聲音行為

如果有必要,你可以對(duì)你的app調(diào)整相關(guān)的,獨(dú)立的音量水平來(lái)產(chǎn)生最好的混合音頻輸出。但最終輸出的音量應(yīng)該總是由系統(tǒng)音量所管理,無(wú)論是音量按鈕還是音量滑動(dòng)條。這意味著app的聲音輸出依然由所屬的用戶來(lái)掌控。

合適的話,確保你的app可以選擇音頻線路。(音頻線路指聲音信號(hào)的一個(gè)電子線路,例如從設(shè)備到耳機(jī)或者從設(shè)備到話筒。)即使人們不物理地插上或者拔出無(wú)線聲音設(shè)備,他們也希望能夠選擇一個(gè)不同的音頻線路。為了處理這個(gè),iOS會(huì)自動(dòng)顯示一個(gè)控制器讓用戶選擇一個(gè)輸出的音頻線路(使用MPVolumeView類來(lái)讓控制器顯示在你的app中)。因?yàn)檫x擇一個(gè)不同的音頻線路是一個(gè)用戶發(fā)起的動(dòng)作,他們期望當(dāng)前播放的聲音不要暫停地繼續(xù)播放。

如果你需要顯示一個(gè)音量滑動(dòng)條,當(dāng)你使用MPVolumeView類時(shí)確保使用系統(tǒng)提供的音量滑動(dòng)條。注意當(dāng)當(dāng)前使用的聲音輸出設(shè)備不支持音量控制時(shí),音量滑動(dòng)條會(huì)被合適的設(shè)備名替換。

如果你的app只產(chǎn)生對(duì)功能不是必須的UI音效,那么就使用系統(tǒng)聲音服務(wù)。系統(tǒng)聲音服務(wù)時(shí)一個(gè)產(chǎn)生警告框、UI音效和震動(dòng)的iOS技術(shù);它不適用于任何其他目的。當(dāng)你使用系統(tǒng)聲音服務(wù)來(lái)產(chǎn)生聲音時(shí),你不能影響你的聲音與設(shè)備上的聲音的交互方式,以及它被設(shè)備配置打斷和更改時(shí)的響應(yīng)。查看Audio UI Sounds (SysSound)獲取示范使用這個(gè)技術(shù)的簡(jiǎn)單工程。

如果聲音在你的app中扮演了很重要的角色,使用音頻會(huì)話服務(wù)或者AVAudioSession類。這些編程接口不產(chǎn)生聲音;它們幫助你表達(dá)你的聲音和設(shè)備上的聲音應(yīng)有的交互方式以及對(duì)設(shè)備配置打斷和更改的響應(yīng)。

IPHONE

無(wú)論你使用何種技術(shù)產(chǎn)生聲音或者定義它的行為,手機(jī)都可以中斷當(dāng)前運(yùn)行的app。這是因?yàn)闆](méi)有app應(yīng)該保護(hù)人們免于收到來(lái)電。

在音頻會(huì)話服務(wù)中,音頻會(huì)話功能作為你的app和系統(tǒng)之間的一個(gè)聲音媒介。其中一個(gè)最重要的方面就是類別(category),這定義了你app中聲音的行為。

為了體會(huì)音頻會(huì)話服務(wù)的優(yōu)勢(shì)以及提供用戶期待的聲音體驗(yàn),你需要選擇最能描述你app中聲音行為的類別。這里是你的app是只能在前臺(tái)播放聲音還是也能在后臺(tái)播放的情況。當(dāng)你進(jìn)行這個(gè)選擇時(shí)遵循下面的指南:

  • 基于語(yǔ)義選擇音頻會(huì)話類別,而不是它精確地一系列行為。通過(guò)目的清晰地選擇一個(gè)類別,你確保你的app按照用戶期待的方式來(lái)行為。此外,這給了你的app最好的機(jī)會(huì)來(lái)在未來(lái)一系列的行為改善時(shí)表現(xiàn)得合適。

  • 在很少的情況下,添加一個(gè)恰當(dāng)?shù)囊纛l會(huì)話來(lái)修改一個(gè)類別的標(biāo)準(zhǔn)行為。一個(gè)類別的標(biāo)準(zhǔn)行為代表了用戶最期待的內(nèi)容,所以在你改變行為前要仔細(xì)地考慮。比如說(shuō),你可能會(huì)恰當(dāng)?shù)靥砑泳o急降低來(lái)確保你的聲音比所有其他的聲音都低(尤其是來(lái)電聲音),如果這是用戶期望你的app做的話。(查看Fine-Tuning a Category來(lái)學(xué)習(xí)更多關(guān)于音頻會(huì)話屬性的內(nèi)容。)

  • 考慮基于予你當(dāng)前設(shè)備的聲音環(huán)境來(lái)選擇類別。這在某些情況下,比如,用戶可以在聽(tīng)其他聲音而不是你的聲道時(shí)使用你的app,就會(huì)有意義。如果你這樣做,確保避免在你的app啟動(dòng)時(shí)讓你的用戶停止他們正在聽(tīng)的音樂(lè)或者進(jìn)行一個(gè)聲道的選擇。

  • 一般來(lái)說(shuō),在你的app運(yùn)行時(shí)避免改變類別。主要的改變類別的原因是你的app需要在不同的時(shí)間支持錄音和播放的時(shí)候。這種情況下,在錄音類別和播放類別之間按需轉(zhuǎn)換會(huì)比選擇播放和錄音類別好。因?yàn)檫x擇錄音類別可以確保在錄音中不想起提示音——比如收到短信的提示音。

表1列出了你可以使用的音頻會(huì)話類別。不同的類別允許聲音被靜音開(kāi)關(guān)(或者設(shè)備鎖屏)靜音、和其他聲音混合或者當(dāng)app在后臺(tái)時(shí)播放聲音。(查看Audio Session Programming Guide獲取他們?cè)诰幊探涌谥械暮线m名稱和實(shí)際類別。)

表1 音頻會(huì)話類別和他們關(guān)聯(lián)的行為
  • 如果你選擇音頻處理類別并且想要在后臺(tái)執(zhí)行音頻處理,你需要保護(hù)你的app避免在完成音頻處理之前被掛起。查看Implementing Long-Running Background Tasks學(xué)習(xí)如何這樣做。

這里是一些情景,可以說(shuō)明如何選擇一個(gè)提供用戶期待的音頻體驗(yàn)的音頻會(huì)話類別。

情景一:一個(gè)幫助人們學(xué)習(xí)一門新語(yǔ)言的教育類app。你提供:

  • 當(dāng)用戶點(diǎn)擊特殊的控件時(shí)播放反饋音

  • 當(dāng)用戶想要聽(tīng)準(zhǔn)確發(fā)音的示例時(shí)播放單詞和短語(yǔ)的錄音。

在這個(gè)app中,聲音對(duì)主要功能是必須的。人們使用這個(gè)app來(lái)聽(tīng)他們正在學(xué)習(xí)的語(yǔ)言的單詞和短語(yǔ),所以即使設(shè)備鎖了或者切換到靜音了也應(yīng)該播放聲音。因?yàn)橛脩粜枰逑吹芈?tīng)到聲音,他們期待其他他們可能播放的音頻靜音。

為了產(chǎn)生用戶期待這個(gè)app所有的音頻體驗(yàn),你應(yīng)該使用播放類別。即使這個(gè)類別可能允許和其他音頻混合,這個(gè)app應(yīng)該使用默認(rèn)行為來(lái)確保其他的音頻不和用戶明確選擇去聽(tīng)的教育內(nèi)容相競(jìng)爭(zhēng)。

情景二:一個(gè)網(wǎng)絡(luò)電話(VoIP)app。你提供:

  • 接受音頻輸入的能力

  • 播放音頻的能力

在這個(gè)app中,聲音對(duì)主要功能是必須的。人們使用這個(gè)app來(lái)與他人交流,并且經(jīng)常在他們使用不同的app的時(shí)候。用戶期待當(dāng)他們切換靜音或者鎖上設(shè)備的時(shí)候也能收到電話,并且他們期待在對(duì)話期間其他音頻是靜音的。他們也期待當(dāng)app在后臺(tái)時(shí)能夠持續(xù)通話。

為了產(chǎn)生用戶期待這個(gè)app所有的音頻體驗(yàn),你應(yīng)該使用播放和錄音類別,并且你要確保你的音頻會(huì)話只在你需要的時(shí)候活動(dòng),這樣用戶就可以在通話之間使用其他的音頻。

情景三:一個(gè)允許用戶指導(dǎo)一個(gè)角色完成不同任務(wù)的游戲。你提供:

  • 多種游戲音效

  • 一個(gè)音樂(lè)配樂(lè)

在這個(gè)app中,聲音很好地加強(qiáng)了用戶體驗(yàn),但對(duì)主任務(wù)不是必要的。同樣,用戶希望可以靜音地玩游戲或者聽(tīng)他們音樂(lè)庫(kù)的音樂(lè)而不是游戲配樂(lè)。

最好的策略是判斷用戶在啟動(dòng)你的app的時(shí)候是否在聽(tīng)其他音頻。不要要求用戶選擇是繼續(xù)聽(tīng)其他音頻還是挺你的配樂(lè)。相反,使用音頻會(huì)話服務(wù)的功能AudioSessionGetProperty來(lái)詢問(wèn)kAudioSessionProperty_OtherAudioIsPlaying屬性的狀態(tài)。給予這個(gè)詢問(wèn)的回答,你可以選擇氛圍或者獨(dú)奏氛圍類別(兩個(gè)類別都允許用戶靜音玩游戲):

  • 如果用戶在聽(tīng)其他音頻,你應(yīng)該假設(shè)他們傾向于繼續(xù)聽(tīng)并且不想被強(qiáng)制聽(tīng)游戲配樂(lè)。在這種情況下,你應(yīng)該選擇氛圍類別。

  • 如果用戶在啟動(dòng)你的app時(shí)沒(méi)有在聽(tīng)任何其他音頻,你應(yīng)該選擇獨(dú)奏氛圍類別。

情景四:一個(gè)提供準(zhǔn)確、實(shí)時(shí)的用戶目的地的導(dǎo)航指令的app。你提供:

  • 對(duì)行程的每一個(gè)語(yǔ)音播報(bào)方向

  • 少量的反饋音

  • 用戶繼續(xù)聽(tīng)他們自己的音頻的能力

在這個(gè)app中,無(wú)論app是否在后臺(tái),語(yǔ)音導(dǎo)航指令代表了主要任務(wù)。因此,你應(yīng)該使用播放類別,允許你的音頻在設(shè)備被鎖、切換到靜音或者在后臺(tái)時(shí)播放音頻。

為了允許人們?cè)谑褂媚愕腶pp時(shí)聽(tīng)其他音頻,你可以添加kAudioSessionProperty_OverrideCategoryMixWithOthers屬性。然而,你也希望確保用戶在他們當(dāng)前播放的音頻之上可以聽(tīng)清語(yǔ)音指令。因此,你可以對(duì)音頻會(huì)話申請(qǐng)kAudioSessionProperty_OtherMixableAudioShouldDuck屬性來(lái)確保你的音頻比其他所有正在播放的音頻要響,不過(guò)iPhone的手機(jī)音頻除外。這個(gè)設(shè)置允許app在后臺(tái)的時(shí)候恢復(fù)其音頻會(huì)話的活動(dòng),確保用戶可以獲取導(dǎo)航的實(shí)時(shí)更新。

情景五:一個(gè)允許用戶更新他們的文本和圖形到網(wǎng)頁(yè)的博客app。你提供:

  • 你簡(jiǎn)短的啟動(dòng)聲音文件

  • 伴隨用戶動(dòng)作的多種簡(jiǎn)短音效(比如當(dāng)一個(gè)提交上傳時(shí)播放的聲音)

  • 當(dāng)提交失敗時(shí)的警告音

在這個(gè)app中,聲音加強(qiáng)了用戶體驗(yàn),但不是必須的。主任務(wù)與音頻沒(méi)有關(guān)系,而且用戶不需要聽(tīng)到任何聲音來(lái)成功地使用app。在這種情景下,你應(yīng)該使用系統(tǒng)聲音服務(wù)來(lái)產(chǎn)生聲音。這是因?yàn)閍pp中所有聲音的音頻環(huán)境都遵循這個(gè)技術(shù)的預(yù)期使用目的,即產(chǎn)生符合用戶期待的遵守設(shè)備鎖屏和靜音開(kāi)關(guān)的方式的UI音效和警告音。

管理音頻中斷

有時(shí)候,當(dāng)前播放的音頻會(huì)被其他app的音頻打斷。在iPhone上,比如說(shuō),一個(gè)打過(guò)來(lái)的電話會(huì)在通話期間打斷當(dāng)前app的音頻。在多任務(wù)環(huán)境下,這種音頻中斷的頻率會(huì)很高。

為了提供一個(gè)用戶喜歡的音頻體驗(yàn),iOS依靠你來(lái):

  • 識(shí)別你的app可以導(dǎo)致的音頻中斷類型

  • 當(dāng)你的app在音頻中斷結(jié)束后繼續(xù)時(shí)響應(yīng)合理

每個(gè)app都需要識(shí)別它能夠?qū)е碌囊纛l中斷類型,但不是每個(gè)app都要決定如何響應(yīng)音頻中斷的結(jié)束。這是因?yàn)榇蟛糠诸愋偷腶pp應(yīng)該通過(guò)回復(fù)音頻來(lái)響應(yīng)音頻中斷的結(jié)束。只有那些主要或部分播放媒體的app——和那些提供媒體播放控件的app——需要額外定義合適的響應(yīng)。

概念上說(shuō),有兩種類型的音頻中斷,基于導(dǎo)致中斷的音頻類別和用戶期待app在中斷結(jié)束時(shí)響應(yīng)的方式:

  • 可恢復(fù)中斷是由用戶在主要聆聽(tīng)體驗(yàn)中臨時(shí)查看的音頻導(dǎo)致的。

在可恢復(fù)中斷結(jié)束后,顯示媒體播放控件的app應(yīng)該恢復(fù)在中斷發(fā)生時(shí)進(jìn)行的內(nèi)容,無(wú)論是播放音頻還是保持暫停。沒(méi)有媒體播放控件的app應(yīng)該恢復(fù)播放音頻。

比如說(shuō),考慮一個(gè)用戶正在iPhone上聽(tīng)一個(gè)音樂(lè)播放app,在音樂(lè)中間收到一個(gè)VoIP電話。用戶答復(fù)這個(gè)電話,期待在他們通話的時(shí)候播放app能夠靜音。在通話結(jié)束后,用戶期待這個(gè)播放app自動(dòng)地回復(fù)播放音樂(lè),因?yàn)橐魳?lè)——而不是通話——構(gòu)成了他們的主要聆聽(tīng)體驗(yàn)并且他們沒(méi)有在電話到來(lái)前暫停音樂(lè)。另一方面如果用戶在電話到來(lái)前暫停了音樂(lè)播放,他們會(huì)期待音樂(lè)在通話結(jié)束后保持暫停。

其他可以導(dǎo)致可恢復(fù)中斷的app有鬧鐘、音頻提示(比如語(yǔ)音提示駕駛方向)等其他中斷音頻。

  • 不可恢復(fù)中斷是由用戶作為主要聆聽(tīng)體驗(yàn)的音頻,比如媒體播放app的音頻,造成的。

在不可恢復(fù)中斷結(jié)束后,顯示媒體播放控件的app不應(yīng)該恢復(fù)播放音頻。沒(méi)有媒體播放控件的app應(yīng)該恢復(fù)播放音頻。

比如說(shuō),考慮用戶聆聽(tīng)一個(gè)音樂(lè)播放app(音樂(lè)app1),而另一個(gè)不同的音樂(lè)播放app(音樂(lè)app2)打斷了。作為響應(yīng),用戶決定聽(tīng)一段時(shí)間的音樂(lè)app2。在退出音樂(lè)app2之后,用戶不期望音樂(lè)app1自動(dòng)恢復(fù)播放,因?yàn)樗麄冇幸庾屢魳?lè)app2變成他們的主要聆聽(tīng)體驗(yàn)。

下面的指南幫助你決定提供什么信息以及如何在一個(gè)音頻中斷結(jié)束后繼續(xù)。

識(shí)別你的app可以導(dǎo)致的音頻中斷類型。當(dāng)你的音頻終止時(shí)通過(guò)在下面兩種方式中的一種來(lái)停止你的音頻會(huì)話。

  • 如果你的app導(dǎo)致一個(gè)可恢復(fù)中斷,伴隨AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation標(biāo)識(shí)停止你的音頻會(huì)話

  • 如果你的app導(dǎo)致一個(gè)不可恢復(fù)中斷,不要伴隨任何標(biāo)識(shí)來(lái)停止你的音頻會(huì)話

提供或不提供,這個(gè)標(biāo)識(shí)允許iOS給中斷的app能力來(lái)自動(dòng)恢復(fù)播放它們的音頻。

決定當(dāng)一個(gè)音頻中斷時(shí)你是否應(yīng)該恢復(fù)音頻。你基于這個(gè)決定來(lái)提供你app的音頻音頻用戶體驗(yàn)。

如果你的app接收到應(yīng)該恢復(fù)的標(biāo)識(shí),你的app應(yīng)該:

  • 如果你的app在中斷發(fā)生的時(shí)候正在播放音頻,則恢復(fù)播放

  • 如果你的app在中斷發(fā)生的時(shí)候沒(méi)有播放音頻,則不恢復(fù)播放

  • 如果你的aoo不顯示播放或暫停的控件,你的app應(yīng)該總是在音頻中斷結(jié)束的時(shí)候恢復(fù)自己的播放音頻,無(wú)論是否提供了應(yīng)該恢復(fù)的標(biāo)識(shí)。

比如說(shuō),一個(gè)播放配樂(lè)的游戲應(yīng)該總是在中斷結(jié)束后自動(dòng)恢復(fù)播放配樂(lè)。

合適的話,處理媒體遠(yuǎn)程控制事件

app可以在用戶使用iOS媒體控件或者配件控件的時(shí)候接收遠(yuǎn)程控制事件,比如耳機(jī)控件。這允許你的app接收用戶從你的UI以外的地方輸入的信息,無(wú)論你的app當(dāng)前是在前臺(tái)還是后臺(tái)播放音頻。

app可以發(fā)送視頻給支持AirPlay的硬件——比如Apple TV——并且當(dāng)播放繼續(xù)時(shí)過(guò)渡到后臺(tái)。這種app可以接收用戶通過(guò)遠(yuǎn)程控制事件輸入的信息,這樣用戶就可以在app在后臺(tái)時(shí)控制視頻的播放。此外,這種類型的app也可以在后臺(tái)的時(shí)候在中斷結(jié)束后恢復(fù)音頻會(huì)話。

尤其是,一個(gè)媒體播放app需要合適地響應(yīng)媒體遠(yuǎn)程控制事件,特別是當(dāng)它在后臺(tái)播放音頻或者視頻的時(shí)候。

為了滿足當(dāng)你的app在后臺(tái)時(shí)播放媒體相關(guān)的職責(zé),確保遵循下述指南:

有意義的時(shí)候限制你的app接收遠(yuǎn)程控制事件的時(shí)間。比如說(shuō),如果你的app幫助用戶閱讀內(nèi)容、搜索信息和聆聽(tīng)音頻,它應(yīng)該只在用戶在音頻環(huán)境下的時(shí)候接收遠(yuǎn)程控制事件。當(dāng)用戶離開(kāi)音頻環(huán)境后,你應(yīng)該放棄接收事件的能力。如果你的app讓用戶在支持AirPlay的設(shè)備上播放音頻或視頻,它應(yīng)該在媒體播放期間接收遠(yuǎn)程控制事件。遵循這些指南允許用戶假設(shè)一個(gè)不同的app媒體——并且用耳機(jī)控件控制它——當(dāng)他們?cè)谀鉧pp中無(wú)媒體環(huán)境的時(shí)候。

盡可能地使用系統(tǒng)提供的控件來(lái)提供AirPlay支持。當(dāng)你使用MPMoviePlayerController類來(lái)支持AirPlay播放時(shí),你可以從允許用戶選擇當(dāng)前范圍內(nèi)的AirPlay設(shè)備的標(biāo)準(zhǔn)控制中獲益。或者你可以使用MPVolumeView類來(lái)顯示用戶可以選擇的支持AirPlay音頻或視頻的設(shè)備。用戶習(xí)慣這些標(biāo)準(zhǔn)控件的表現(xiàn)和行為,所以他們知道如何在你的app中使用它們。

不要重新改變事件的目的,即使事件在你的app中沒(méi)有意義。用戶期待iOS媒體控件和配件控件在所有app中的功能一致。你不用處理你app不需要的事件,但你處理的事件必須產(chǎn)生用戶期待的體驗(yàn)。如果你重新定義一個(gè)事件的意義,你會(huì)迷惑用戶并且可能導(dǎo)致他們進(jìn)入一個(gè)無(wú)知的狀態(tài)。

本文翻譯自蘋果官方開(kāi)發(fā)文檔

查看完整合集


查看作者首頁(yè)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容