今天项目中遇到这样一个需求 ,根据后台接口里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文档
# 文档
# 弹出
# 判断是否
# 是一个
# 器上
# 我是
# 加载
# 是在
# 不需要
# 网上
# 这是一个
# 给大家
# 这样一个
# 找了
# 做一个
# 写了
# 而定
# 大家多多
# 中能
# 在网上
相关文章:
如何高效利用200m空间完成建站?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
在线制作视频网站免费,都有哪些好的动漫网站?
php json中文编码为null的解决办法
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
c# 服务器GC和工作站GC的区别和设置
Swift中switch语句区间和元组模式匹配
如何在橙子建站上传落地页?操作指南详解
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
常州企业建站如何选择最佳模板?
如何制作网站标识牌,动态网站如何制作(教程)?
如何自定义建站之星模板颜色并下载新样式?
高性价比服务器租赁——企业级配置与24小时运维服务
如何快速搭建虚拟主机网站?新手必看指南
如何选择建站程序?包含哪些必备功能与类型?
广东企业建站网站优化与SEO营销核心策略指南
建站之星后台密码遗忘如何找回?
如何通过商城自助建站源码实现零基础高效建站?
如何在万网ECS上快速搭建专属网站?
微课制作网站有哪些,微课网怎么进?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
高防服务器:AI智能防御DDoS攻击与数据安全保障
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
深圳网站制作培训,深圳哪些招聘网站比较好?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
制作企业网站建设方案,怎样建设一个公司网站?
广州建站公司哪家好?十大优质服务商推荐
建站主机与虚拟主机有何区别?如何选择最优方案?
焦点电影公司作品,电影焦点结局是什么?
大连网站制作公司哪家好一点,大连买房网站哪个好?
建站之星展会模板:智能建站与自助搭建高效解决方案
宝塔面板创建网站无法访问?如何快速排查修复?
,柠檬视频怎样兑换vip?
制作公司内部网站有哪些,内网如何建网站?
如何选择PHP开源工具快速搭建网站?
建站之星后台管理:高效配置与模板优化提升用户体验
如何用景安虚拟主机手机版绑定域名建站?
如何在建站宝盒中设置产品搜索功能?
建站主机无法访问?如何排查域名与服务器问题
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
建站之星ASP如何实现CMS高效搭建与安全管理?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何在宝塔面板中修改默认建站目录?
,网站推广常用方法?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
建站之星安装后如何配置SEO及设计样式?
建站之星代理商如何保障技术支持与售后服务?
*请认真填写需求信息,我们会在24小时内与您取得联系。