安卓使用WebView下载文件,安卓实现软件升级功能

本文介绍如何在安卓应用中使用WebView实现文件下载,以提供更好的用户体验。通过设置WebView的DownloadListener,捕获下载链接并在应用内直接启动下载,避免调用系统浏览器。同时,展示了具体的Java代码实现,包括创建WebViewClient、处理下载事件和保存文件到SD卡的逻辑。
摘要由CSDN通过智能技术生成

因为调用系统默认浏览器下载更新,造成用户体验很不好,所以决定在webview中直接下载系统更新,然后直接安装。

因为要下载,所以必须用webview,联网权限这里不说了,直接写在manifafest中。

我们常用的下载都是调用Android默认浏览器 这样写


 1、设置WebView的DownloadListener:

    webView.setDownloadListener(new MyWebViewDownLoadListener());

    2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:    

[java] view plaincopy
  1. private class MyWebViewDownLoadListener implements DownloadListener {  
  2.   
  3.         @Override  
  4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
  5.                                     long contentLength) {  
  6.             Uri uri = Uri.parse(url);  
  7.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
  8.             startActivity(intent);  
  9.         }  
  10.   
  11.     }  


为了直接下载,

Sample:

java代码:

  

public class zwebxiazai extends Activity {
   
 WebView webView;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        this.webView=(WebView) this.findViewById(R.id.webview);
        this.webView.getSettings().setSupportZoom(false);
        this.webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        this.webView.loadUrl("http://a.zntx.cc/");
        this.webView.setWebViewClient(new WebViewClientDemo());
        webView.setDownloadListener(new DownloadListener() {
            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);
            }
    });


    }
  private class WebViewClientDemo extends WebViewClient {
    @Override
    // 在WebView中而不是默认浏览器中显示页面
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
      return true;
     }

     

    }
  }

 


main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<WebView android:id="@+id/webview" android:layout_width="fill_parent"
    android:layout_height="0dip" android:layout_weight="1" />


</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这个类,具体可以如下这样:  

Java代码  复制代码  收藏代码
  1. private class MyWebViewDownLoadListener implements DownloadListener{   
  2.   
  3.         @Override  
  4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,   
  5.                                     long contentLength) {              
  6.             Log.i("tag""url="+url);              
  7.             Log.i("tag""userAgent="+userAgent);   
  8.             Log.i("tag""contentDisposition="+contentDisposition);            
  9.             Log.i("tag""mimetype="+mimetype);   
  10.             Log.i("tag""contentLength="+contentLength);   
  11.             Uri uri = Uri.parse(url);   
  12.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);   
  13.             startActivity(intent);              
  14.         }   
  15.     }  
[java]  view plain copy
  1. private class MyWebViewDownLoadListener implements DownloadListener{  
  2.   
  3.         @Override  
  4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
  5.                                     long contentLength) {             
  6.             Log.i("tag""url="+url);             
  7.             Log.i("tag""userAgent="+userAgent);  
  8.             Log.i("tag""contentDisposition="+contentDisposition);           
  9.             Log.i("tag""mimetype="+mimetype);  
  10.             Log.i("tag""contentLength="+contentLength);  
  11.             Uri uri = Uri.parse(url);  
  12.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
  13.             startActivity(intent);             
  14.         }  
  15.     }  

  这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载,不过,这也基本上满足我们的应用场景了。 

我在项目中的运用 
项目要求这样: 
1,需要使用WebView加载一个网页; 
2,网页中有文件下载的链接,点击后需要下载文件到SDcard; 
3,然后自动打开文件; 
下面是具体解决办法 
第一步,对WebView进行一系列设置。 

Java代码  复制代码  收藏代码
  1. WebView webview=(WebView)layout.findViewById(R.id.webview);   
  2.                 webview.getSettings().setJavaScriptEnabled(true);   
  3.                 webview.setWebChromeClient(new MyWebChromeClient());   
  4.                 webview.requestFocus();   
  5. //              webview.loadUrl("file:///android_asset/risktest.html");   
  6.                 webview.loadUrl(jcrs_sub.get(position).addr);   
  7.                 // 设置web视图客户端   
  8.                 webview.setWebViewClient(new MyWebViewClient());   
  9.                 webview.setDownloadListener(new MyWebViewDownLoadListener());   
  10.   
  11. //内部类   
  12. public class MyWebViewClient extends WebViewClient {   
  13.         // 如果页面中链接,如果希望点击链接继续在当前browser中响应,   
  14.         // 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。   
  15.         public boolean shouldOverviewUrlLoading(WebView view, String url) {   
  16.             L.i("shouldOverviewUrlLoading");   
  17.             view.loadUrl(url);   
  18.             return true;   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值