小伙伴们在开发安卓的时候一定会用到webview加载h5页面的,今天就来说说这货。
1 为什么要用呢
当然是为了节省成本了,假如,一个公司只有pc端的电商,现在想做移动端的电商了,那就可以直接把html加载到webview上了,节省了大量的成本;另外,尤其是在移动端,版本更新更加容易,不用每次都发布新版本,只要加载不同的html就可了,如果有bug的话就要发新版本了;
2 加载
WebView webView = (WebView) findViewById(R.id.webview);
webView.loadUrl("http://www.baidu.com");
//获取h5的title
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
});
//webview自己加载html
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
3 下载
mWebView.setDownloadListener(new MyDownLoad());
//webview下载文件
class MyDownLoad implements DownloadListener {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
//通过url下载,这个url就是文件地址
System.out.println("quyang="+url);
//调用系统下载,并且在通知栏显示进度
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
}
}
4 错误处理
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
//webview异常毁掉
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
//在此处加载本地预备好的错误页面
//gone掉webview
}
});
5 同步cookie(在handler中处理,下面是关键代码)
CookieSyncManager.createInstance(this);
CookieManager instance = CookieManager.getInstance();
instance.setAcceptCookie(true);
instance.setCookie("登陆的url","cookie");
CookieSyncManager.getInstance().sync();
mWebView.loadUrl("登陆接口");