Android 下载并打开PDF,Doc,Dwg文档实例

Android 下载并打开PDF,Doc,Dwg文档实例,第1张

概述今天项目中遇到这样一个需求,根据后台接口里pdf,doc,dwg文档的地址是一个URL,需要根据文档的url下载到本地(内部存储或内存卡)并用手机中能打开该文档的软件d出来并打开,(这里需要做一个缓存,第一次查看这个文档是在

今天项目中遇到这样一个需求,根据后台接口里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文档实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1146416.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存