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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值