關於WebView加載的的網頁中加載一些音頻文件,退出的時候無法關閉的問題,網上一堆的解決方案,但是都沒有解決我的問題。我們的界面是一個很特殊的情況,在onDestory的時候,不能立刻關閉WebView( myWebView.destroy();myWebView = null;)
后期各種嘗試,都沒法關閉,最后想到了用系統的音頻管理來處理這個問題,沒想到還真的可以,下面直接放代碼:
if (audioManager == null) {
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
}
/**系統音頻控制權限,AUDIOFOCUS_GAIN_TRANSIENT 短暫獲取**/
int result = audioManager.requestAudioFocus(
adfocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
/**AUDIOFOCUS_REQUEST_GRANTED 標識拿到控制,然后再將監聽釋放**/
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
if (audioManager != null) {
audioManager.abandonAudioFocus(adfocusChangeListener);
}
}
/**
* 獲取音頻焦點
**/
private AudioManager.OnAudioFocusChangeListener adfocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
}
};
onAudioFocusChange()方法的focusChange參數指示了該AudioFocus的競爭者對AudioFocus的擁有情況,取值如下:
- AUDIOFOCUS_GAIN:獲得了Audio Focus;
- AUDIOFOCUS_LOSS:失去了Audio Focus,並將會持續很長的時間。這里因為可能會停掉很長時間,所以不僅僅要停止Audio的播放,最好直接釋放掉Media資源。而因為停止播放Audio的時間會很長,如果程序因為這個原因而失去AudioFocus,最好不要讓它再次自動獲得AudioFocus而繼續播放,不然突然冒出來的聲音會讓用戶感覺莫名其妙,感受很不好。這里直接放棄AudioFocus,當然也不用再偵聽遠程播放控制【如下面代碼的處理】。要再次播放,除非用戶再在界面上點擊開始播放,才重新初始化Media,進行播放。
- AUDIOFOCUS_LOSS_TRANSIENT:暫時失去Audio Focus,並會很快再次獲得。必須停止Audio的播放,但是因為可能會很快再次獲得AudioFocus,這里可以不釋放Media資源;
-
AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:暫時失去AudioFocus,但是可以繼續播放,不過要在降低音量。
