做项目的时候遇到一个问题,就是安卓用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");
}
}
音频方面的知识,可以参考:https://blog.csdn.net/codemydream/article/details/53434891