Android AudioManager處理兩個播放器同時有聲音媳握,停止其中一個播放的問題

盡管某個時刻只有一個activity可以運行嚷往,Android卻是一個多任務環(huán)境.這對使用音頻的應用帶來了特殊的挑戰(zhàn)杭棵,因為只有一個音頻輸出而可能多個媒體都想用它.在Android2.2之前,沒有內(nèi)建的機制來處理這個問題胆绊,所以可能在某些情況下導致壞的用戶體驗.例如氨鹏,當一個用戶正在聽音樂而另一個應用需要通知用戶一些重要的事情時,用戶可能由于音樂聲音大而不能聽的通知.從Android2.2開始压状,平臺為應用提供了一個協(xié)商它們?nèi)绾问褂迷O備音頻輸出的途徑仆抵,這個機制叫做音頻焦點,AudioManager种冬。
當你的應用需要輸出像樂音和通知之類的音頻時镣丑,你應該總是請求音頻焦點.一旦應用具有了焦點,它就可以自由的使用音頻輸出.但它總是應該監(jiān)聽焦點的變化.如果被通知丟失焦點娱两,它應該立即殺死聲音或降低到靜音水平(有一個標志表明應選擇哪一個)并且僅當重新獲得焦點后才恢復大聲播放莺匠。
首先,注冊一個焦點監(jiān)聽器OnAudioFocusChangeListener 十兢。

private AudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener = null;   
  //Build.VERSION.SDK_INT表示當前SDK的版本趣竣,Build.VERSION_CODES.ECLAIR_MR1為SDK 7版本 ,    
 //因為AudioManager.OnAudioFocusChangeListener在SDK8版本開始才有旱物。    
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1){     
      mAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {   
        @Override
            public void onAudioFocusChange(int focusChange) {       
              if(focusChange == AudioManager.AUDIOFOCUS_LOSS){
                    //失去焦點之后的操作
                    if(isPlaying()){    
                           pause(); 
                           }
                }else if(focusChange == AudioManager.AUDIOFOCUS_GAIN){  
                //獲得焦點之后的操作
                }   
                }   
    };      
}

要請求音頻焦點遥缕,你必須從AudioManager mAudioMgr 調(diào)用requestAudioFocus(),如下所示:

private void requestAudioFocus() {  
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.ECLAIR_MR1){
        return;
    }
    if (mAudioMgr == null)
        mAudioMgr = (AudioManager) ApplicationEx.app.getSystemService(Context.AUDIO_SERVICE);
    if (mAudioMgr != null) {
        DLog.i(TAG, "Request audio focus");
        int ret = mAudioMgr.requestAudioFocus(mAudioFocusChangeListener,AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
        if (ret != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {               DLog.i(TAG, "request audio focus fail. " + ret);
        }
    }
}

放棄焦點

private void abandonAudioFocus() {
    if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.ECLAIR_MR1){
        return;
    }
    if (mAudioMgr != null) {
        DLog.i(TAG, "Abandon audio focus");
        mAudioMgr.abandonAudioFocus(mAudioFocusChangeListener);
        mAudioMgr = null;
    }
}

參數(shù)focusChange告訴你音頻焦點如何發(fā)生了變化宵呛,它可以是以上幾種值(它們都是定義在AudioManager中的常量):
AUDIOFOCUS_GAIN:你已獲得了音頻焦點.

AUDIOFOCUS_LOSS:你已經(jīng)丟失了音頻焦點比較長的時間了.你必須停止所有的音頻播放.因為預料到你可能很長時間也不能再獲音頻焦點单匣,所以這里是清理你的資源的好地方.比如,你必須釋放MediaPlayer.

AUDIOFOCUS_LOSS_TRANSIENT:你臨時性的丟掉了音頻焦點宝穗,很快就會重新獲得.你必須停止所有的音頻播放户秤,但是可以保留你的資源,因為你可能很快就能重新獲得焦點.

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你臨時性的丟掉了音頻焦點逮矛,但是你被允許繼續(xù)以低音量播放鸡号,而不是完全停止.
轉(zhuǎn)自:http://www.csdn123.com/html/blogs/20130507/10148.htm

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市须鼎,隨后出現(xiàn)的幾起案子膜蠢,更是在濱河造成了極大的恐慌堪藐,老刑警劉巖莉兰,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挑围,死亡現(xiàn)場離奇詭異,居然都是意外死亡糖荒,警方通過查閱死者的電腦和手機杉辙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捶朵,“玉大人蜘矢,你說我怎么就攤上這事∽劭矗” “怎么了品腹?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長红碑。 經(jīng)常有香客問我舞吭,道長,這世上最難降的妖魔是什么析珊? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任羡鸥,我火速辦了婚禮,結(jié)果婚禮上忠寻,老公的妹妹穿的比我還像新娘惧浴。我一直安慰自己,他們只是感情好奕剃,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布衷旅。 她就那樣靜靜地躺著,像睡著了一般纵朋。 火紅的嫁衣襯著肌膚如雪柿顶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天倡蝙,我揣著相機與錄音九串,去河邊找鬼。 笑死寺鸥,一個胖子當著我的面吹牛猪钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胆建,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烤低,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了笆载?” 一聲冷哼從身側(cè)響起扑馁,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤涯呻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后腻要,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體复罐,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年雄家,在試婚紗的時候發(fā)現(xiàn)自己被綠了效诅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡趟济,死狀恐怖乱投,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情顷编,我是刑警寧澤戚炫,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站媳纬,受9級特大地震影響双肤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜层宫,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一杨伙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萌腿,春花似錦限匣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贮庞,卻和暖如春峦筒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗慎。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工物喷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遮斥。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓峦失,卻偏偏與公主長得像,于是被迫代替她去往敵國和親术吗。 傳聞我的和親對象是個殘疾皇子尉辑,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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

  • Media Playback Android多媒體框架包涵了對播放多種通用媒體的類型的支持,所以你可以很容易的集成...
    VegetableAD閱讀 882評論 0 0
  • Android 多媒體框架包含了支持播放的一系列常見多媒體類型较屿,以此可以很容易地整合諸如音頻隧魄、視頻卓练、圖片到你的應用...
    LeaYw閱讀 3,208評論 1 22
  • 因為系統(tǒng)中可能會有多個應用程序會播放音頻,所以需要考慮他們之間該如何交互购啄,為了避免多個應用程序同時播放音樂,...
    ZebraWei閱讀 3,218評論 0 1
  • 這幾天都很忙襟企,所以斷更了一天,后面幾天還很遲才有時間寫闸溃,今天趁這個空擋寫一下吧整吆,這樣晚上就不用連睡覺也記著,今天...
    晴冰閱讀 289評論 0 0
  • 首先 祝大家雞年大吉 感覺大家一年總要跨好幾次年——元旦辉川、春節(jié)、生日拴测,有的還要加上立春或冬至乓旗。用各種各樣富有儀式感...
    墨之翎閱讀 637評論 1 1