因为调用系统默认浏览器下载更新,造成用户体验很不好,所以决定在webview中直接下载系统更新,然后直接安装。
因为要下载,所以必须用webview,联网权限这里不说了,直接写在manifafest中。
我们常用的下载都是调用Android默认浏览器 这样写
1、设置WebView的DownloadListener:
webView.setDownloadListener(new MyWebViewDownLoadListener());
2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:
- private class MyWebViewDownLoadListener implements DownloadListener {
- @Override
- public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
- long contentLength) {
- Uri uri = Uri.parse(url);
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- }
- }
为了直接下载,
Sample:
java代码:
public class zwebxiazai extends Activity {
main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TextView
<WebView android:id="@+id/webview" android:layout_width="fill_parent"
</LinearLayout>
在AndroidManifest.xml中加入访问internet的权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Sample2 这个比较详细
WebView控制调用相应的WEB页面进行展示。当碰到页面有下载链接的时候,点击上去是一点反应都没有的。原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。具体操作如下:
1、设置WebView的DownloadListener:
webView.setDownloadListener(new MyWebViewDownLoadListener());
2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:
- private class MyWebViewDownLoadListener implements DownloadListener{
- @Override
- public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
- long contentLength) {
- Log.i("tag", "url="+url);
- Log.i("tag", "userAgent="+userAgent);
- Log.i("tag", "contentDisposition="+contentDisposition);
- Log.i("tag", "mimetype="+mimetype);
- Log.i("tag", "contentLength="+contentLength);
- Uri uri = Uri.parse(url);
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- }
- }
- private class MyWebViewDownLoadListener implements DownloadListener{
- @Override
- public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
- long contentLength) {
- Log.i("tag", "url="+url);
- Log.i("tag", "userAgent="+userAgent);
- Log.i("tag", "contentDisposition="+contentDisposition);
- Log.i("tag", "mimetype="+mimetype);
- Log.i("tag", "contentLength="+contentLength);
- Uri uri = Uri.parse(url);
- Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- startActivity(intent);
- }
- }
这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载,不过,这也基本上满足我们的应用场景了。
我在项目中的运用
项目要求这样:
1,需要使用WebView加载一个网页;
2,网页中有文件下载的链接,点击后需要下载文件到SDcard;
3,然后自动打开文件;
下面是具体解决办法
第一步,对WebView进行一系列设置。
- WebView webview=(WebView)layout.findViewById(R.id.webview);
- webview.getSettings().setJavaScriptEnabled(true);
- webview.setWebChromeClient(new MyWebChromeClient());
- webview.requestFocus();
- // webview.loadUrl("file:///android_asset/risktest.html");
- webview.loadUrl(jcrs_sub.get(position).addr);
- // 设置web视图客户端
- webview.setWebViewClient(new MyWebViewClient());
- webview.setDownloadListener(new MyWebViewDownLoadListener());
- //内部类
- public class MyWebViewClient extends WebViewClient {
- // 如果页面中链接,如果希望点击链接继续在当前browser中响应,
- // 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
- public boolean shouldOverviewUrlLoading(WebView view, String url) {
- L.i("shouldOverviewUrlLoading");
- view.loadUrl(url);
- return true;