赞
踩
问题:在开发中我们使用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");
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。