Android解决h5退出后继续播放视频问题

问题:

    Android webview有一个bug,就是当承载webview的Activity被停止后(onStop),该webview的进程还会持续一段时间。这个问题在网页正在播放视频或音频时十分明显,退出Activity之后还会继续播放一段时间的声音。该问题在http://www.2cto.com/kf/201501/366465.html中也提了出来,并提供了一些解决方案。


解决方案:

    1.调用webview api onPause

protected void onPause() {
    super.onPause();
 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
         webView.onPause(); // 暂停网页中正在播放的视频
    }
}


    2.使用webview加载空白页面

web.pauseTimers();  
web.stopLoading();  
web.loadData("", "text/xml", "utf-8");

     3.调用系统音频应用,发送暂停指令 

Intent i = new Intent("com.android.music.musicservicecommand"); 
i.putExtra("command", "pause"); 
mContext.sendBroadcast(i);

 

     4.加载空白页

web.loadData("about:blank");

     经过测试,以上方法都不太好用,一些存在适配问题。最近做这需求时遇到这个问题,想到了用js注入的方法在Activity退出时利用js代码暂停网页中正在播放的视频。在终端上用webview播放的视频一般是用到H5中的video标签,所以js代码很容易实现,而且效果不错。


JS注入

在Activity的onPause()加入

protected void onPause() {
    super.onPause();


    String jsCode = "(function(){ var video = docment.getElementsByTagName('video')[0]; video.pause(); })()";
    mWebview.loadUrl("javascript: "+jsCode);
}


其实核心代码是里面的JS代码。如果考虑到H5中存在多个视频的话,可以进行遍历暂停。

function() {
    var videos = docment.getElementsByTagName('video');
    
    for(var i=0; i<videos.length; i++){
        if(!videos[i].paused){
             videos[i].pause()
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值