[android WebView] 关于适配浏览器播放视频问题和alipay://这类开头的支付问题

这个东西是很久之前就准备放上来的,一直忘了

首先这个是web的配置

private void initWeb(WebView wbv){
    // TODO Auto-generated method stub
    wbv.setInitialScale(5);
    WebSettings webSettings = wbv.getSettings();
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setBuiltInZoomControls(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setSupportZoom(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    webSettings.setGeolocationEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setDatabaseEnabled(true);
    webSettings.setUseWideViewPort(true); // 关键点
    webSettings.setAllowFileAccess(true); // 允许访问文件
    webSettings.setSupportZoom(false); // 支持缩放
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setPluginState(WebSettings.PluginState.ON);
    webSettings.setSupportMultipleWindows(true);
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不加载缓存内容
    wbv.clearCache(true);
}

解决视频播放不了的问题:

wbv.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView webView, String s) {
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        Log.e("协议",url);
        if(url.startsWith("intent")||url.startsWith("youku")||url.startsWith("bilibili")){

            return true;
        }else{
            return super.shouldOverrideUrlLoading(view, url);
        }

    }
});

url.startsWith("视频的协议")(如bilibill的话,他的开头为bilibili://,需要什么就直接添加到if后面就可以播放需要的视频类型

解决Webview支付宝页面打不开的问题(alipay://):

首先需要

wbv.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView webView, String s) {
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        Log.e("协议",url);
        if (url.contains("alipayqr://")){
            boolean isAli=isAlipayQR();
            if (isAli){
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
            }
        }else if (url.contains("alipays://")){
            boolean isAli=isAlipay();
            if (isAli){
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
            }
        }else if (url.startsWith("newtab:")){
            url=url.replace("newtab:","");
            view.loadUrl(url);
        }else if (url.startsWith("intent")||url.startsWith("youku")){
            return super.shouldOverrideUrlLoading(view, url);
        }else{
            view.loadUrl(url);
        }
        return true;
    }
});

然后

//适配协议
private boolean isAlipay(){
    Uri uri=Uri.parse("alipays://platformapi/startApp");
    Intent intent=new Intent(Intent.ACTION_VIEW,uri);
    ComponentName cname=intent.resolveActivity(getPackageManager());
    return  cname!=null;

}
private boolean isAlipayQR(){
    Uri uri=Uri.parse("alipayqr://platformapi/startApp");
    Intent intent=new Intent(Intent.ACTION_VIEW,uri);
    ComponentName cname=intent.resolveActivity(getPackageManager());
    return  cname!=null;

}

这个2个方法是如果安装了支付宝就可以直接打开APP

另外还有一个关于 浏览器加了_back标签的情况

解决方法为:

wbv.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        WebView newWebView =new WebView(MainActivity.this);
        view.addView(newWebView);
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();
        newWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //去掉注释使用系统浏览器打开
                Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                browserIntent.setData(Uri.parse(url));
                startActivity(browserIntent);
                //  view.loadUrl(url);
                return true;
            }
        });
        return true;
    }
});

可以参考此处

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章