Android 在WebView中调用系统下载的简单使用

目录

前言

最近发现项目中的WebView加载下载页的时候是一片空白,没有出现下载,于是简单的调用了系统的下载对其进行下载

过程

自定义一个下载监听,实现了DownloadListener这个接口

class MyDownloadStart implements DownloadListener{
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
            downUrl = url;
            //从链接里获取文件名
            String dirNameString = url.substring(url.lastIndexOf("/") + 1);
            //获得下载文件的大小
            DecimalFormat decimalFormat = new DecimalFormat("0.00");
            float size = contentLength;
            dirName.setText(dirNameString);
            if (size < 1024){
                dirSize.setText(size + "B");
            }else  if (size < 1048576){
                String dirSizeStringKB = decimalFormat.format(size / 1024);
                dirSize.setText(dirSizeStringKB + "K");
            }else if (size < 1073741824){
                String dirSizeString = decimalFormat.format(size / 1048576);
                dirSize.setText(dirSizeString + "M");
            }else {
                String dirStringG = decimalFormat.format(size / 1073741824);
                dirSize.setText(dirStringG + "G");
            }
            //显示是否下载的dialog
            downdialog.show();
        }
}

将MyDownloadStart设置到WebView上;

mWebView.setWebViewDownListener(new MyDownloadStart());

设置Dialog,点击是调用系统下载

DownloadManager downloadManager = (DownloadManager) getContext().getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downUrl));
//下载时,下载完成后显示通知
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
//下载的路径,第一个参数是文件夹名称,第二个参数是下载的文件名
request.setDestinationInExternalPublicDir("SooDown",dirName.getText().toString());
request.setVisibleInDownloadsUi(true);
downloadManager.enqueue(request);

这样就可以进行下载了,但是我们是不知道什么时候下载完成的。通过DownloadManager下载完成系统会发送条广播,我们要做的是要接收到该广播并进行处理

public class DownloadReceiver extends BroadcastReceiver{


    @Override
    public void onReceive(Context context, Intent intent) {
        DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())){
            Toast.makeText(context,"下载完成",Toast.LENGTH_SHORT).show();
        }else if (DownloadManager.ACTION_NOTIFICATION_CLICKED.equals(intent.getAction())){
            //点击通知栏进入下载管理页面
            Intent intent1 = new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS);
            intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent1);
        }
    }
}

最后一步,不要忘记配置BroadcastReceiver

在AndroidManifest.xml中配置

<receiver android:name=".Utils.DownloadReceiver">
            <intent-filter>
                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
                <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>
            </intent-filter>
</receiver>

这样基本就差不多可以了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值