解決Android中使用webview載入音視訊返回後還有聲音問題
阿新 • • 發佈:2019-01-06
問題:在開發中我們使用webview載入網頁播放音視訊後,當我們返回到上一頁後繼續播放
原因:在載入網頁播放音訊時,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();
//重新載入
mWebview.reload();
}
@Override
protected void onResume() {
super.onResume();
isPause=false;
}
@Override
protected void onPause() {
super.onPause();
isPause=true;
}
@Override
protected void onDestroy() {
super.onDestroy();
mWebview.destroy();
mAudioManager.abandonAudioFocus(audioFocusChangeListener);
}
private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
HnLogUtils.e(TAG, "focusChange: " + 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) {
HnLogUtils.e(TAG, "audio focus been granted");
}
}