這個東西是很久之前就準備放上來的,一直忘了
首先這個是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; } });