这个东西是很久之前就准备放上来的,一直忘了
首先这个是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; } });