android webView 全屏播放网络视频

1.webView播放网络视频时,有些视频源点击全屏时无反应,经过反复查验探索,原因是某些厂商写的页面不规范导致。

通过阅读官方文档得知  应用如果需要支持HTML5的video标签,必须打开硬件加速。我们只需要在Application标签或者相应Activity标签下添加android:hardwareAccelerated="true"即可。接着为了支持全屏,需要重写WebChromeClientonShowCustomView()onHideCustomView()方法,这两个方法缺一不可。

大概就是这样:

 private class CustomWebViewChromeClient extends WebChromeClient{

// 横屏在这里操作
    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
        fullScreen();
        mWebView.setVisibility(View.GONE);
        mVideoContainer.setVisibility(View.VISIBLE);
        mVideoContainer.addView(view);
        mCallBack=callback;
        super.onShowCustomView(view, callback);
    }

//竖屏在这里操作
    @Override
    public void onHideCustomView() {
        fullScreen();
        if (mCallBack!=null){
            mCallBack.onCustomViewHidden();
        }
        mWebView.setVisibility(View.VISIBLE);
        mVideoContainer.removeAllViews();
        mVideoContainer.setVisibility(View.GONE);
        super.onHideCustomView();
    }
}

private void fullScreen() {
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}
最后别忘记处理屏幕旋转,否则横竖屏切换会重新走一遍生命周期。通过在一些主流视频网站上的测试,在爱奇艺,土豆,芒果TV,PPTV等可正常全屏,在腾讯,乐视,BiliBili,Acfun等网站仍然无法全屏。通过日志我们可以发现,根本没有回调onShowCustomView这个方法,所以没有执行相应代码。为什么呢这是个前端问题时间太久不记得是哪个方法了  总之是他们没调用规则上的方法,所以我们需要注入JS。

注入这段JS:

"javascript:document.getElementsByClassName('" + tag + "')[0].addEventListener('click',function(){onClick.fullscreen();return false;});"

tag是Class标识,onClick.fullscreen()是我自己本地定义的方法。那么如何注入这段js代码呢?我们只需要重写WebClient的onPageFinished()方法,如下所示:

private class CustomWebClient extends WebViewClient{

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        String js=TagUtils.getJs(url);
        view.loadUrl(js);
    }
}

private class JsObject{

    @JavascriptInterface
    public void fullscreen(){
        //监听到用户点击全屏按钮
       fullScreen();
    }
}

mWebView.addJavascriptInterface(new JsObject(),"onClick");

  这样就可以实现上述几个网站的全屏播放了。 经测试,腾讯和BiliBili没有问题了,乐视和Acfun仍然不可以全屏,即使已经找到了全屏按钮的Class标识。哪位大仙可以提供一个解释 不胜感激。 下面给出一些我收集的几个视频网站的全屏按钮Class标识:

public static String getTagByUrl(String url) {
    if (url.contains("qq")) {
        return "tvp_fullscreen_button"; // http://m.v.qq.com
    } else if (url.contains("youku")) {
        return "x-zoomin";              // http://www.youku.com
    } else if (url.contains("bilibili")) {
        return "icon-widescreen";       // http://www.bilibili.com/mobile/index.html
    } else if (url.contains("acfun")) {
        return "controller-btn-fullscreen"; //http://m.acfun.tv   无效
    } else if (url.contains("le")) {
        return "hv_ico_screen";         // http://m.le.com  无效
    }
    return "";
}

  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值