安卓 下载pdf文件

大家好, 大家好,我也是最近开始接触 pdf下载功能,网上查了不少, 然而呢 好几个都不适用,最后 功夫不负有心人,哈哈哈 还是成功了,废话不多说,看下面吧。

1,首先呢 需要创建一个工具类,如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class DownloadUtilNew {private static DownloadUtilNew downloadUtil;private final OkHttpClient okHttpClient;public static DownloadUtilNew get() {if (downloadUtil == null) {downloadUtil = new DownloadUtilNew();}return downloadUtil;}private DownloadUtilNew() {okHttpClient = new OkHttpClient();}/*** @param url          下载连接* @param destFileDir  下载的文件储存目录* @param destFileName 下载文件名称* @param listener     下载监听*/public void download(final String url, final String destFileDir, final String destFileName, final OnDownloadListener listener) {Request request = new Request.Builder().url(url).build();okHttpClient.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {// 下载失败监听回调listener.onDownloadFailed(e);}@Overridepublic void onResponse(Call call, Response response) throws IOException {InputStream is = null;byte[] buf = new byte[2048];int len = 0;FileOutputStream fos = null;// 储存下载文件的目录File dir = new File(destFileDir);if (!dir.exists()) {dir.mkdirs();}File file = new File(dir, destFileName);try {is = response.body().byteStream();long total = response.body().contentLength();fos = new FileOutputStream(file);long sum = 0;while ((len = is.read(buf)) != -1) {fos.write(buf, 0, len);sum += len;int progress = (int) (sum * 1.0f / total * 100);// 下载中更新进度条listener.onDownloading(progress);}fos.flush();// 下载完成listener.onDownloadSuccess(file);} catch (Exception e) {listener.onDownloadFailed(e);} finally {try {if (is != null)is.close();} catch (IOException e) {}try {if (fos != null)fos.close();} catch (IOException e) {}}}});}public interface OnDownloadListener {/*** @param file 下载成功后的文件*/void onDownloadSuccess(File file);/*** @param progress 下载进度*/void onDownloading(int progress);/*** @param e 下载异常信息*/void onDownloadFailed(Exception e);}

2,然后第二步 开始调用,如下:

    btn_downLoad.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String time= CommonNew.getCurrentTime();downFile(time+"nb", mPdfUrl);}});/*** 下載文件** @param name* @param urlString*/public void downFile(String name, String urlString) {Log.d("info","存储的文件名是=="+name+".pdf");DownloadUtilNew.get().download(urlString,  Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "NBFile",   name + ".pdf", new DownloadUtilNew.OnDownloadListener() {@Overridepublic void onDownloadSuccess(File file) {Log.v("info", "下载成功,文件已存入手机内部存储设备根目录下NBFile文件夾中");runOnUiThread(new Runnable() {@Overridepublic void run() {XToast.showShort(mContext,"下载成功,文件已存入手机内部存储设备根目录下NBFile文件夾中");}});Looper.prepare();//增加部分Looper.loop();//增加部分}@Overridepublic void onDownloading(int progress) {Log.v("info", "下载進度" + progress);
//                progressDialog.setProgress(progress);}@Overridepublic void onDownloadFailed(Exception e) {runOnUiThread(new Runnable() {@Overridepublic void run() {XToast.showShort(mContext,"下载失败,请重试");}});Log.d("info","下载失败了 "+e.toString());
//                if (progressDialog != null && progressDialog.isShowing()) {//                    progressDialog.dismiss();
//                }}});}

3,第三步,需要添加权限相关才行:

int permission = ActivityCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {// 请求权限ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_REQ_CODE);}

至于在 AndroidManifest.xml中的那些文件写入权限我就不加了,不过有个必要地方需要说明,也是我遇到的坑吧,由于安卓10的版本原因,有时候即便自己写了必要的动态权限创建文件,然鹅呢 还是失败,原因我查了一下说是 分区存储吧, 自行搜索吧, 如下图:

对,是的,需要添加红色圈的代码才行。

OK ,大概就是这样,

安卓 下载pdf到手机存储相关推荐

  1. 华为手机助手安卓版_渲美手机恢复助手安卓下载-渲美手机恢复助手安卓版下载1.0.0...

    渲美手机恢复助手安卓版是一个系统清理和优化工具,可以快速查找数据提高工作效率.渲美手机恢复助手能一键恢复图片视频语音文件,西西提供的版本已优化,打开即专业版去广告! 软件介绍 [更简单的操作步骤]一键 ...

  2. 安卓手机浏览器_chrome浏览器插件安卓下载-chrome apk手机版下载v4.8.2安卓版

    chrome apk手机版是一款非常好的浏览器,想必大家都用过,今天289给大家带来了最新版本,用户可以通过这个浏览器查找自己需要的东西.还可以实现智能搜索,运行也是非常快,感兴趣的用户不妨现在就来下 ...

  3. python编辑器安卓手机版_python编译器安卓下载-python编译器手机版下载v1.8.0 安卓版-2265安卓网...

    python编译器手机版是一款超棒的编程工具.专业的编程内容设计,多种多样的语言选择,完美的脚本,强大的功能,没有任何广告,快速的编写,还有快速提示,自由复制等等! python编译器安卓软件介绍 - ...

  4. 安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开

    安卓从服务器中下载pdf文件 然后调用第三方软件WPS Office打开 前提: 高版本想使用Uri.fromFile() file://的形式 需要在onCreate 或init方法中添加下面代码. ...

  5. 华为手机助手安卓版_渲美手机恢复助手安卓版安卓版下载-渲美手机恢复助手安卓版app下载...

    渲美手机恢复助手是个非常好用的手机应用应用软件.ie小编强烈推荐哦,这个app不但能为你提供超多使用起来非常便捷的功能,还可以让你轻松对手机的系统以及内存进行优化,让自己不再因为手机卡顿而烦恼! 软件 ...

  6. flash小黄油安卓_今日软件 | 电信免费升级500M、安卓下载神器、MX Player、全能PDF工具、Chrome增强版、硬盘坏道扫描工具...

    今日软件更新 安卓APP 「检摄」2.0.2 # 用手机传感器检测摄像头,保护隐私 ▾下载:https://lanzous.com/icbrxpi 「Volume Styles」1.7.1 # 定制修 ...

  7. 微信公众号内下载pdf等文件,受微信所限制,安卓和IOS不同处理方式(最最最优版)

    继上一篇文章微信公众号内下载pdf等文件,受微信所限制,安卓和IOS不同处理方式 后觉得还有更好的解决办法,这次真的找到更加优化版本,一定需要后台配合才行:后台接口返回Blob,后端设置respons ...

  8. 百度android模拟器下载地址,百度手机助手电脑版怎么下载 安卓模拟器电脑版下载地址...

    最近在朋友圈非常流行的手游百度手机助手已经开放下载了,不过不少玩家都觉得手机上玩百度手机助手手机屏幕太小,操作不方便,画面不够清晰炫酷.那么如何在电脑上运行百度手机助手这款手游呢?小编现在就推荐一款百 ...

  9. uniapp 安卓平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限

    今天接到一个项目 uniapp写的app 客户要求 在app加载页不可以向用户申请读取权限 要使用到这个权限的时候再申请 打开manifest.json文件,切换到"源码视图"项 ...

最新文章

  1. mac mysql5.7 my_【mysql】Mac下安装mysql5.7 完整步骤,大坑已解决
  2. WebKit与event.layerX和event.layerY有关的问题
  3. 求职必备:如何用产品思维写简历
  4. access开发精要(14)-货币与数字类型格式(2)
  5. Java程序设计当中包的使用_【学习笔记】 唐大仕—Java程序设计 第4讲 类、包和接口之4.2 类的继承...
  6. WX微信小程序路由API使用
  7. mysql sysdate本周_mysql 查询当天、本周,本月,上一个月的数据
  8. Java中Lambda表达式的使用(转)
  9. 分库分表学习总结(4)——分布式事务常见应用场景总结
  10. 阿里云HBase全新发布X-Pack 赋能轻量级大数据平台
  11. push推送服务设计
  12. 交换机千兆和百兆对网速影响_电信宽带升级为200M,为什么网速没有提升多少?...
  13. 以太坊 solidity return 返回值写法 3种格式
  14. 什么是WAF(lua+nginx)
  15. python调用按键精灵插件_【按键精灵】三分钟教你实现自动解决各种验证码
  16. C4D中阿诺德默认材质-万能材质-stander surface
  17. 卡诺图简单逻辑化简与五变量卡诺图化简
  18. java web象棋教程_【Java学习笔记】实战——网络象棋
  19. 在centos虚拟机中修改IP地址
  20. Cuba 设置debug模式

热门文章

  1. uname -a了解
  2. 青少年python编程比赛试题答案_Python编程及应用-中国大学mooc-试题题目及答案
  3. 人脸识别、行人识别、图片库
  4. 机器学习系统设计和诊断方法学习总结
  5. 剑指offter Java单链表反转
  6. 振作只需一个理由:日子不能这样过
  7. 艾伟也谈项目管理,项目经理要如何看待技术?
  8. error uploading crisocket: timed out waiting for the conditionswapoff -a # will turn off the swap
  9. 使用QQ邮箱“邮我”组件,方便他人快速给你发邮件
  10. Jeesite4本地及服务器上传文件、图片详解