今天项目中遇到这样一个需求 ,根据后台接口里pdf,doc,dwg文档的地址 是一个URL ,需要根据文档的url 下载到本地(内部存储或内存卡)并用手机中能打开该文档的软件弹出来并打开,(这里需要做一个缓存,第一次查看这个文档是在服务器上下载并打开,以后打开不需要下载直接打开本地的文档)在网上找了些资料 写了以下代码,下面分享给大家;

效果图:
代码:
这是一个单独的类 首先接收intent传过来的url我是用url的后14位作为存储本地的文件名(这里根据自己服务器的文件命名规则而定) 拿到文件路径之后 判断本地是否有此文件 有则打开没有则从服务器上下载并打开 ;
Intent intent = act.getIntent();
final String Strname = intent.getStringExtra("docurl");
//截取最后14位 作为文件名
String s = Strname.substring(Strname.length()-14);
//文件存储
file1 = new File(Environment.getExternalStorageDirectory(), getFileName(s));
new Thread() {
public void run() {
File file = new File( file1.getAbsolutePath());
//判断是否有此文件
if (file.exists()) {
//有缓存文件,拿到路径 直接打开
Message msg = Message.obtain();
msg.obj = haha;
msg.what = DOWNLOAD_SUCCESS;
handler.sendMessage(msg);
mProgressDialog.dismiss();
return;
}
// 本地没有此文件 则从网上下载打开
File downloadfile = downLoad(Strname, file1.getAbsolutePath(), mProgressDialog);
// Log.i("Log",file1.getAbsolutePath());
Message msg = Message.obtain();
if (downloadfile != null) {
// 下载成功,安装....
msg.obj = downloadfile;
msg.what = DOWNLOAD_SUCCESS;
} else {
// 提示用户下载失败.
msg.what = DOWNLOAD_ERROR;
}
handler.sendMessage(msg);
mProgressDialog.dismiss();
};
}.start();
下载文档代码;
传入需要下载的文档的url 和存入内存的路径和dialog
public static File downLoad(String serverpath, String savedfilepath, ProgressDialog pd) {
try {
URL url = new URL(serverpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
int max = conn.getContentLength();
pd.setMax(max);
InputStream is = conn.getInputStream();
File file = new File(savedfilepath);
FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte[] buffer = new byte[1024];
int total = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
total += len;
pd.setProgress(total);
}
fos.flush();
fos.close();
is.close();
return file;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
打开文件选择器
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case DOWNLOAD_SUCCESS:
File file = (File) msg.obj;
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType (Uri.fromFile(file), "application/pdf");
// startActivity(intent);
startActivity(Intent.createChooser(intent, "标题"));
/**
* 弹出选择框之后 把本activity销毁
*/
finish();
break;
case DOWNLOAD_ERROR:
Util.showToast(act,"文件加载失败");
break;
}
}
};
整体代码
public class list_item_doc extends BaseActivity {
private ProgressDialog mProgressDialog;
// 下载失败
public static final int DOWNLOAD_ERROR = 2;
// 下载成功
public static final int DOWNLOAD_SUCCESS = 1;
private File file1;
@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
initView();
}
private void initView() {
// TODO Auto-generated method stub
Intent intent = act.getIntent();
final String Strname = intent.getStringExtra("url");
mProgressDialog = new ProgressDialog(act);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();
//截取最后14位 作为文件名
String s = Strname.substring(Strname.length()-14);
//文件存储
file1 = new File(Environment.getExternalStorageDirectory(), getFileName(s));
new Thread() {
public void run() {
File haha = new File( file1.getAbsolutePath());
//判断是否有此文件
if (haha.exists()) {
//有缓存文件,拿到路径 直接打开
Message msg = Message.obtain();
msg.obj = haha;
msg.what = DOWNLOAD_SUCCESS;
handler.sendMessage(msg);
mProgressDialog.dismiss();
return;
}
// 本地没有此文件 则从网上下载打开
File downloadfile = downLoad(Strname, file1.getAbsolutePath(), mProgressDialog);
// Log.i("Log",file1.getAbsolutePath());
Message msg = Message.obtain();
if (downloadfile != null) {
// 下载成功,安装....
msg.obj = downloadfile;
msg.what = DOWNLOAD_SUCCESS;
} else {
// 提示用户下载失败.
msg.what = DOWNLOAD_ERROR;
}
handler.sendMessage(msg);
mProgressDialog.dismiss();
};
}.start();
}
/**
* 下载完成后 直接打开文件
*/
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case DOWNLOAD_SUCCESS:
File file = (File) msg.obj;
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType (Uri.fromFile(file), "application/pdf");
// startActivity(intent);
startActivity(Intent.createChooser(intent, "标题"));
/**
* 弹出选择框 把本activity销毁
*/
finish();
break;
case DOWNLOAD_ERROR:
Util.showToast(act,"文件加载失败");
break;
}
}
};
/**
*
*/
/**
* 传入文件 url 文件路径 和 弹出的dialog 进行 下载文档
*/
public static File downLoad(String serverpath, String savedfilepath, ProgressDialog pd) {
try {
URL url = new URL(serverpath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
int max = conn.getContentLength();
pd.setMax(max);
InputStream is = conn.getInputStream();
File file = new File(savedfilepath);
FileOutputStream fos = new FileOutputStream(file);
int len = 0;
byte[] buffer = new byte[1024];
int total = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
total += len;
pd.setProgress(total);
}
fos.flush();
fos.close();
is.close();
return file;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String getFileName(String serverurl) {
return serverurl.substring(serverurl.lastIndexOf("/") + 1);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 下载pdf文件
# 打开pdf文件
# android打开doc文件
# Android自定义PasswordInputView密码输入
# android手机端与PC端使用adb forword通信
# Android NDK开发简单程序分享(Hello Word!)
# Android webview转PDF的方法示例
# Android实现pdf在线预览或本地预览的方法
# Android使用模板生成支持手机直接查看的Word文档
# 文档
# 弹出
# 判断是否
# 是一个
# 器上
# 我是
# 加载
# 是在
# 不需要
# 网上
# 这是一个
# 给大家
# 这样一个
# 找了
# 做一个
# 写了
# 而定
# 大家多多
# 中能
# 在网上
相关文章:
制作网站怎么制作,*游戏网站怎么搭建?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
实例解析angularjs的filter过滤器
建站168自助建站系统:快速模板定制与SEO优化指南
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建站之星代理商如何保障技术支持与售后服务?
北京制作网站的公司,北京铁路集团官方网站?
小程序网站制作需要准备什么资料,如何制作小程序?
网站app免费制作软件,能免费看各大网站视频的手机app?
建站主机选购指南:核心配置优化与品牌推荐方案
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
网站制作模板下载什么软件,ppt模板免费下载网站?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何使用Golang安装API文档生成工具_快速生成接口文档
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
,交易猫的商品怎么发布到网站上去?
淘宝制作网站有哪些,淘宝网官网主页?
小型网站建站如何选择虚拟主机?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站之星备案是否影响网站上线时间?
如何快速搭建高效WAP手机网站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
济南网站制作的价格,历城一职专官方网站?
制作网站的软件免费下载,免费制作app哪个平台好?
网站制作公司排行榜,抖音怎样做个人官方网站
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何在万网主机上快速搭建网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
简单实现Android文件上传
完全自定义免费建站平台:主题模板在线生成一站式服务
如何零成本快速生成个人自助网站?
如何快速搭建二级域名独立网站?
如何在建站之星绑定自定义域名?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何做网站制作流程,*游戏网站怎么搭建?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
广州商城建站系统开发成本与周期如何控制?
h5网站制作工具有哪些,h5页面制作工具有哪些?
微信小程序 五星评分(包括半颗星评分)实例代码
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
如何在橙子建站中快速调整背景颜色?
网站制作网站,深圳做网站哪家比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。