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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 播放声音 停止其他,Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题,暂停其他的播放...

發布時間:2023/12/10 Android 75 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 播放声音 停止其他,Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题,暂停其他的播放... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

盡管某個時刻只有一個

activity

可以運行,

Android

卻是一個多任務環境.這對使用音頻的應用帶來了特殊的挑戰,因為只有一個音頻輸出而可能多個媒體都想用它.在

Android2.2

之前,沒有內建的機制來處理這個問題,所以可能在某些情況下導致壞的用戶體驗.例如,當一個用戶正在聽音樂而另一個應用需要通知用戶一些重要的事情時,用戶可能由于音樂聲音大而不能聽的通知.從

Android2.2

開始,平臺為應用提供了一個協商它們如何使用設備音頻輸出的途徑,這個機制叫做音頻焦點,AudioManager。

當你的應用需要輸出像樂音和通知之類的音頻時,你應該總是請求音頻焦點.一旦應用具有了焦點,它就可以自由的使用音頻輸出.但它總是應該監聽焦點的變化.如果被通知丟失焦點,它應該立即殺死聲音或降低到靜音水平(有一個標志表明應選擇哪一個)并且僅當重新獲得焦點后才恢復大聲播放。

首先,注冊一個焦點監聽器OnAudioFocusChangeListener 。

privateAudioManager.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?=?newAudioManager.OnAudioFocusChangeListener()?{

@Override

publicvoidonAudioFocusChange(intfocusChange)?{

if(focusChange?==?AudioManager.AUDIOFOCUS_LOSS){

//失去焦點之后的操作

if(isPlaying()){

pause();

}

}elseif(focusChange?==?AudioManager.AUDIOFOCUS_GAIN){

//獲得焦點之后的操作

}

}

};

}

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

privatevoidrequestAudioFocus()?{

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");

intret?=?mAudioMgr.requestAudioFocus(mAudioFocusChangeListener,

AudioManager.STREAM_MUSIC,?AudioManager.AUDIOFOCUS_GAIN);

if(ret?!=?AudioManager.AUDIOFOCUS_REQUEST_GRANTED)?{

DLog.i(TAG,?"request?audio?focus?fail.?"+?ret);

}

}

}

放棄焦點

privatevoidabandonAudioFocus()?{

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;

}

}

參數focusChange告訴你音頻焦點如何發生了變化,它可以是以上幾種值(它們都是定義在AudioManager中的常量):

AUDIOFOCUS_GAIN:你已獲得了音頻焦點.

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

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

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你臨時性的丟掉了音頻焦點,但是你被允許繼續以低音量播放,而不是完全停止.

當第三方播放器也使用了這個機制的話,當你的應用獲取聲音焦點之后,第三方播放器失去焦點,做了暫停處理,即會停止播放。這樣就不會出現兩個播放器同時播放音樂的情況了。而如果第三方播放器沒有經過處理,不管有沒有焦點都一直播放,那就沒有辦法了。 =。=||

總結

以上是生活随笔為你收集整理的android 播放声音 停止其他,Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题,暂停其他的播放...的全部內容,希望文章能夠幫你解決所遇到的問題。

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