Android开发使用WebView实战技巧

转载请注明出处:

前段时间做项目的时候,,在项目中用了WebView组件,遇到了一些问题,所以特地找来了一些资料,学习怎么解决,现在将学习的内容整理成一篇博客记录在这里,方便以后再次遇到时可以快速查看并且解决问题。我们知道,Android中WebView是一个大型的组件,其实WebView是集成了著名的浏览器引擎webkit的一个框架,主要是用来在Android应用中加载渲染网页的。好了,这篇学习笔记之前,我也学习了Google的官方文档,介绍WebView的基本用法,并且翻译好了,地址是:,请还没用过WebView的同学,先查看一下这篇文章后,再看我下面的内容。

获取网页的Title信息

我们在打开某些应用的时候,例如今日头条新闻客户端等,有些页面是使用WebView加载的,然而经常在界面的顶端会有标题栏,而且标题栏的内容不是我们自己在程序中写死的,而是动态从网页中获取的,那么我们怎么获取呢?大家都知道,在Html中,一个完整的网页中必然会包含<title></title>标签,标签之间就是标题的内容,so我们只需要将Html中的title标签中的内容获取到就可以了。要获取Title内容就必须设置WebView的setWebChromeClient(WebChromeClient client)方法,传递一个WebChromeClient 对象并且重写其下的shouldOverrideUrlLoading(WebView view, String url)方法,该方法中回调了title就是<title></title>标签间内容。例如:

…mWebView = (WebView) findViewById(R.id.webview);//开启JavaScript支持mWebView.getSettings().setJavaScriptEnabled(true);//加载网页mWebView.loadUrl("");//强制在webview打开网页,防止使用系统默认的浏览器打开网页mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return super.shouldOverrideUrlLoading(view, url);}});mWebView.setWebChromeClient(new WebChromeClient() {@Overridepublic void onReceivedTitle(WebView view, String title) {//onReceivedTitle可以回调网页的titletv_title.setText(title);super.onReceivedTitle(view, title);}});…

如上图所示,webview中打开了网页,并且将title现在在了TextView标题上。

用WebView下载文件

同样的,当我们在使用浏览器的时候,很多时候会需要下载文件,浏览器是个功能十分强大的应用,可以帮助我们下载网上的文件,那么如果我们的应用中集成了WebView组件,其中渲染的网页也有文件可供下载时,我们该怎么去做下载功能呢?同样,既然浏览器功能那么强大,我们的WebView组件也不差。下面我们看看WebView是怎样下载文件的。

public class DownloadActivity extends Activity {private WebView mWebView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_download);mWebView = (WebView) findViewById(R.id.webview);// 开启JavaScript支持mWebView.getSettings().setJavaScriptEnabled(true);mWebView.loadUrl("");mWebView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return super.shouldOverrideUrlLoading(view, url);}});// 监听下载mWebView.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype, long contentLength) {System.out.println("url:" + url);if (url.endsWith(".zip")) {// 如果传进来url包含.zip文件,那么就开启下载线程System.out.println("download start…");new DownloadThread(url).start();}}});}/** * 执行下载的线程 */class DownloadThread extends Thread {private String mUrl;public DownloadThread(String url) {this.mUrl = url;}@Overridepublic void run() {try {URL httpUrl = new URL(mUrl);HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();conn.setDoInput(true);conn.setDoOutput(true);conn.setConnectTimeout(5000);conn.setReadTimeout(5000);InputStream in = conn.getInputStream();FileOutputStream out = null;// 获取下载路径File downloadFile;File sdFile;if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {downloadFile = Environment.getExternalStorageDirectory();sdFile = new File(downloadFile, "download.zip");out = new FileOutputStream(sdFile);}byte[] b = new byte[8 * 1024];int len;while ((len = in.read(b)) != -1) {if (out != null) {out.write(b, 0, len);}}if (out != null) {out.close();}if (in != null) {in.close();}System.out.println("download success…");} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}

其实特别简单,WebView中已经给我们提供好一个实现下载的接口以及回调方法,这个接口就是android.webkit.DownloadListener,我们首先调用WebView的setDownloadListener(DownloadListener listener)方法,在方法参数中传入DownloadListener对象,重写其中的onDownloadStart方法,在这个方法中开启下载功能的线程,让线程帮助我们去服务器下载文件。

WebView错误码的处理

WebView错误码处理是什么意思呢?我们在使用Android设备的时候,可能某些时候网络不好或者没有网络,这时候设备就访问不到服务器了,加载不了Html页面。一般情况下,当我们的设备无网络情况下加载一个Html时,会自行弹出Android默认的错误页面,如下图:

或许是某座闻名遐迩的文化古城。我们可以沿途用镜头记录彼此的笑脸,

Android开发使用WebView实战技巧

相关文章:

你感兴趣的文章:

标签云: