目录

解决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");
    }
}