解决Android中使用webview加载音视频返回后还有声音问题
目录
解决Android中使用webview加载音视频返回后还有声音问题
问题:在开发中我们使用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");
}
}