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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于音频焦点的理解

發(fā)布時間:2024/4/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于音频焦点的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
什么叫音頻焦點(diǎn) (audio focus)?
? android系統(tǒng)是一個多任務(wù)操作系統(tǒng),因此同一時刻允許許多任務(wù)同時工作。但是這對音頻類應(yīng)用來說是個挑戰(zhàn),因?yàn)槿绻鄠€音頻同時播放的話,很多情況下用戶體驗(yàn)會相當(dāng)?shù)牟?#xff01;比如聽音樂時,來了個電話,這時你的耳機(jī)里就是電話和音樂共同工作,絕對是個悲劇!
? 為了解決這個問題從android2.2開始引入audio focus的概念。當(dāng)你需要播放音樂或者發(fā)送一個通知的時候,你可以去要求獲得音頻焦點(diǎn)。一旦獲得,就可以自由的使用音頻輸出設(shè)備。但是同時它也在時時刻刻的監(jiān)聽著音頻焦點(diǎn)的變化。當(dāng)音頻焦點(diǎn)變化時,你需要去合適的處理你的音頻輸出。
?
音頻焦點(diǎn)工作的示例:
第一步
首先你要獲得一個音頻管理服務(wù)AudioManager
? ? ? ? mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
這個通常在service的oncreate中完成。
?
第二步
然后在合適的地方,比如播放音樂的按鈕中放置獲得音頻焦點(diǎn)的代碼
? ? ? ? mAudioManager.requestAudioFocus(mAudioFocusListener,
? ? ? ? ? ? ? ? AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
requestAudioFocus方法可以獲得音頻焦點(diǎn),其有三個參數(shù),解釋如下:
第一個參數(shù) OnAudioFocusChangeListener:就是音頻焦點(diǎn)變化時的監(jiān)聽器,這是音頻焦點(diǎn)控制的重點(diǎn)。
第二個參數(shù)streamType:焦點(diǎn)獲得之后的數(shù)據(jù)傳輸類型,這里是AudioManager.STREAM_MUSIC
第三個參數(shù)durationHint :告知系統(tǒng),你要求獲得音頻焦點(diǎn)的用途,系統(tǒng)根據(jù)你所要求的類型來給其他監(jiān)聽者發(fā)出相應(yīng)的焦點(diǎn)控制參數(shù)。有三種可選
? ? ? AUDIOFOCUS_GAIN_TRANSIENT:只是短暫獲得,一會就釋放焦點(diǎn),比如你只是想發(fā)個notification時用下一秒不到的鈴聲。
? ? ?AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:只是背景獲得,之前的音頻焦點(diǎn)使用者無需釋放焦點(diǎn)給我,我將與其共同使用。
? ? ?AUDIOFOCUS_GAIN:我要求完全獲得焦點(diǎn),其他人需要釋放焦點(diǎn)。比如我要播放音樂了,這時就要搶占整個音頻焦點(diǎn)。
?
第三步
實(shí)現(xiàn)音頻焦點(diǎn)監(jiān)聽器OnAudioFocusChangeListener,這個監(jiān)聽器會根據(jù)當(dāng)前音頻焦點(diǎn)的變化,調(diào)用onAudioFocusChange(int focusChange)方法,focusChange主要有以下四種參數(shù):
? ? AUDIOFOCUS_AGIN:你已經(jīng)完全獲得了音頻焦點(diǎn)
? ? AUDIOFOCUS_LOSS:你會長時間的失去焦點(diǎn),所以不要指望在短時間內(nèi)能獲得。請結(jié)束自己的相關(guān)音頻工作并做好收尾工作。比如另外一個音樂播放器開始播放音樂了(前提是這個另外的音樂播放器他也實(shí)現(xiàn)了音頻焦點(diǎn)的控制,baidu音樂,天天靜聽很遺憾的就沒有實(shí)現(xiàn),所以他們兩個是可以跟別的播放器同時播放的)
? ? AUDIOFOCUS_LOSS_TRANSIENT:你會短暫的失去音頻焦點(diǎn),你可以暫停音樂,但不要釋放資源,因?yàn)槟阋粫涂梢詩Z回焦點(diǎn)并繼續(xù)使用
? ?AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你的焦點(diǎn)會短暫失去,但是你可以與新的使用者共同使用音頻焦點(diǎn)?
?
具體示例如下:
?
? ? private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener(){
? ? ? ? public void onAudioFocusChange(int focusChange) {
? ? ? ? ? ? switch(focusChange){
? ? ? ? ? ? ? ? case AudioManager.AUDIOFOCUS_LOSS:
? ? ? ? ? ? ? ? ? ? if(isPlaying()){
? ? ? ? ? ? ? ? ? ? ? //we do not need get focus back in this situation
? ? ? ? ? ? ? ? ? ? ? //會長時間失去,所以告知下面的判斷,獲得焦點(diǎn)后不要自動播放
? ? ? ? ? ? ? ? ? ? ? ? mPausedByTransientLossOfFocus = false;
? ? ? ? ? ? ? ? ? ? ? ? pause();//因?yàn)闀L時間失去,所以直接暫停
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
? ? ? ? ? ? ? ? case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
? ? ? ? ? ? ? ? ? ? if(isPlaying()){
? ? ? ? ? ? ? ? ? ? ? ?//短暫失去焦點(diǎn),先暫停。同時將標(biāo)志位置成重新獲得焦點(diǎn)后就開始播放
? ? ? ? ? ? ? ? ? ? ? ? mPausedByTransientLossOfFocus = true;
? ? ? ? ? ? ? ? ? ? ? ? pause();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case AudioManager.AUDIOFOCUS_GAIN:
? ? ? ? ? ? ? ? ? ? //重新獲得焦點(diǎn),且符合播放條件,開始播放
? ? ? ? ? ? ? ? ? ? if(!isPlaying()&&mPausedByTransientLossOfFocus){
? ? ? ? ? ? ? ? ? ? ? ? mPausedByTransientLossOfFocus = false;
? ? ? ? ? ? ? ? ? ? ? ? resume();
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }};
?
最后
在適當(dāng)?shù)臅r候注銷掉這個監(jiān)聽器比如在onDestroy()中
? ? ? ? mAudioManager.abandonAudioFocus(mAudioFocusListener);
到此整個音頻焦點(diǎn)的控制就完成了
?
?
? 講一個自己的故事,mPausedByTransientLossOfFocus 這個參數(shù)一開始沒理解有什么作用,就沒寫。直到發(fā)現(xiàn),我的音樂播放器在我已經(jīng)手動暫停的情況下,總是在我打完電話后自動播放音樂,才發(fā)現(xiàn)他的作用。打完電話,手機(jī)就這么一路唱著歌在我的口袋里二逼呵呵的歡樂著。自己還不知道,等再要用手機(jī)的時候發(fā)現(xiàn)電都被搞掉了不少,且無數(shù)人側(cè)目看我是一個怎樣的二貨喜歡外放音樂.....慶幸手機(jī)里沒有鳳凰傳奇的歌曲。
? 其實(shí)這個參數(shù)的作用就是可以讓播放器僅僅在短暫失去音頻焦點(diǎn)并重新獲得后才開始播放音樂。而不是任何時候重新獲得焦點(diǎn)都開始播放。

總結(jié)

以上是生活随笔為你收集整理的关于音频焦点的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。