全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

今天项目中遇到这样一个需求 ,根据后台接口里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小时内与您取得联系。