標籤:.com ica html transient 直接 private public manager systems
關於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,但是可以繼續播放,不過要在降低音量。
android WebView音頻關閉的問題