[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;
    }
});

可以參考此處

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