安卓載入webView視訊頁面,退出後還有聲音
阿新 • • 發佈:2019-02-19
做專案的時候遇到一個問題,就是安卓用webView載入視訊的頁面,銷燬當前頁面後,還是能聽到視訊播放的聲音,以此來記錄解決問題的方案。
嘗試過在onDestroy()方法中,呼叫webView.destroy()方法,銷燬它,但是沒效果。
參考了另外方法解決的,首先說一下產生這樣現象的原因是:在載入網頁播放音訊時,html5的audio/video 標籤將獲取系統播放音訊的焦點(類似將系統音訊管理的許可權給了標籤使用),返回後焦點未被改變,網頁任將獲取音訊的使用許可權,導致音視訊可能繼續在後臺播放。
解決方案:在介面被銷燬時,讓網頁的標籤失去焦點,失去對音訊的使用許可權。
直接上程式碼。
1.獲取音訊管理器
private AudioManager mAudioManager;
private boolean isPause=false;
mAudioManager= (AudioManager) getSystemService(Context.AUDIO_SERVICE);
2.在destory()中讓標籤失去焦點,讓應用自身獲取焦點。
@Override protected void onRestart() { super.onRestart(); //重新載入 sportStartWeb.reload(); } @Override protected void onResume() { super.onResume(); isPause=false; } @Override protected void onPause() { super.onPause(); isPause=true; } @Override protected void onDestroy() { super.onDestroy(); sportStartWeb.destroy(); mAudioManager.abandonAudioFocus(audioFocusChangeListener); } private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() { @Override public void onAudioFocusChange(int focusChange) { if (isPause && focusChange == AudioManager.AUDIOFOCUS_LOSS) { requestAudioFocus(); } } }; //音訊控制元件獲取焦點 private void requestAudioFocus() { int result = mAudioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { Log.e(TAG, "audio focus been granted"); } }