
今天项目中遇到这样一个需求,根据后台接口里pdf,doc,DWg文档的地址 是一个URL,需要根据文档的url 下载到本地(内部存储或内存卡)并用手机中能打开该文档的软件d出来并打开,(这里需要做一个缓存,第一次查看这个文档是在服务器上下载并打开,以后打开不需要下载直接打开本地的文档)在网上找了些资料 写了以下代码,下面分享给大家;
效果图:
代码:
这是一个单独的类 首先接收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,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,"标题")); /** * d出选择框之后 把本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()) { //有缓存文件,安装.... 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),"标题")); /** * d出选择框 把本activity销毁 */ finish(); break; case DOWNLOAD_ERROR: Util.showToast(act,"文件加载失败"); break; } } };/** * */ /** * 传入文件 url 文件路径 和 d出的dialog 进行 下载文档 */ public static file downLoad(String serverpath,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,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,Doc,Dwg文档实例全部内容,希望文章能够帮你解决Android 下载并打开PDF,Doc,Dwg文档实例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)