WebView使用_WebView监听网页下载_DownloadManager使用

原文:https://www.cnblogs.com/fucking-the-whole-world/p/5333060.html

最近在做一个较简单的项目:通过一个webview来显示一个网页的App

  这个网页有下载的功能,关于这一功能需要用到两个知识点:

  1、webview监听网页的下载链接。(webview默认情况下是没有开启,在这个情况下,你会发现,在浏览器上可以正常下载的网页里的某个点击。在你的webview里面,点击是没有反应的);

  2、使用系统的DownloadManager进行下载。

提前说下,在这两个小知识点遇到的坑:

  1、第一个坑,就是前面说的,需要Webview开启下载监听,否则,你会发现,点击下载,没有反应。

  

extends Activity implements DownloadListener //这里某个类实现这个下载监听
@Override
    public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimetype, long contentLength) {
        startDownload(url);
    }

  2、第二个坑,已经开启下载监听,但是依旧点击没有反应。并且,这个网站在pc浏览器上,点击相应的下载链接,能够下载。这会儿就陷入巨坑,紧接着要抓狂了。不断的查看是不是自己少写了什么。不过包括看了API也就这两行代码。最后在Android的浏览器上面发现也不能够下载,这会儿我就理直气壮得找网页开发端,告诉他们,你们的网页不能够下载。他们的解决办法就是将这个下载链接新开一个页签。结果神奇得可以了。安卓浏览器能够正常得下载网页相应的链接,我的webview也就能够监听到网页下载点击事件。

  能够监听到下载点击事件,那么接下来就是使用这个监听到的url进行下载。起初我想到的是像远程更新APP一样的方案:通过一个IO,将文件下载到指定的文件路径,然后通过Intent进行安装。显然这样可以,不过过于麻烦,因为系统提供了DownloadManager比较简单。代码如下:

  

复制代码

private void startDownload(String url) {
        dm = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
        DownloadManager.Request request = new DownloadManager.Request(
                Uri.parse(url));
        request.setMimeType("application/vnd.android.package-archive");
        request.setVisibleInDownloadsUi(true);
        request.setDestinationInExternalFilesDir(this,
                Environment.DIRECTORY_DOWNLOADS, "fileName");
        enqueue = dm.enqueue(request);
    }

复制代码

  3、第三个坑就是,插入了这段代码后,貌似可以下载了。为什么说貌似呢,因为手机顶部已经能够看到这个下载的标志,但是没有多久就消失了。并且下拉看不到已下载的项目,此时,就无从点击安装下载的app。经过抓狂,以及最后的沉着冷静,最后发现,只要添加上一段代码就可以了。

复制代码

private void startDownload(String url) {
        dm = (DownloadManager) this.getSystemService(Context.DOWNLOAD_SERVICE);
        DownloadManager.Request request = new DownloadManager.Request(
                Uri.parse(url));
        request.setMimeType("application/vnd.android.package-archive");
        request.setVisibleInDownloadsUi(true);
        request.setDestinationInExternalFilesDir(this,
                Environment.DIRECTORY_DOWNLOADS,"fileName"); 
    //添加下面这段代码    //添加下面这段代码
    request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
     enqueue = dm.enqueue(request); }

复制代码

此时就能够在下拉,看到所下载的项目,点击,对下载的app进行安装。

至此实现了:

  1、webview监听网页的下载链接。

  2、使用系统的DownloadManager进行下载。

猜你喜欢

转载自blog.csdn.net/NewActivity/article/details/88417366