Android浏览器直接打开网页上的文档

Android浏览器直接打开网页上的文档在做移动办公软件时,需要移动终端在线打开网页上的文档,在iPad上能直接打开文档在线显示,但是在android系统上却不能,它只是把这个文档下载下来,然后只能自己找到文档的位置点击打开,很不方便。没办法,只能自己写个客户端,拦截请求,自动下载和打开。

大家好,又见面了,我是你们的朋友全栈君。

       在做移动办公软件时,需要移动终端在线打开网页上的文档,在iPad上能直接打开文档在线显示,但是在android系统上却不能,它只是把这个文档下载下来,然后只能自己找到文档的位置点击打开,很不方便。没办法,只能自己写个客户端,拦截请求,自动下载和打开。

一:实现思路

Android浏览器直接打开网页上的文档

二:核心实现

1)主要配置文件

Android浏览器直接打开网页上的文档

2)核心代码

public class FileOpenTestActivity extends Activity {

 private WebView webView;
 private Context mContext = null;

 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  this.mContext = this;
  webView = (WebView) findViewById(R.id.webview);
  webView.getSettings().setJavaScriptEnabled(true);
  webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  webView.setWebViewClient(new WebViewClient() {

   public boolean shouldOverrideUrlLoading(WebView view, String url) {

    //判断是否是文件下载链接,如果不是则返回,直接访问
    String fileName = url.substring(url.lastIndexOf(“/”));
    if(null == getFileType(fileName) || getFileType(fileName).equals(“”)){

     return false;
    }
    
    //如果是文件下载链接,先下载,再调用系统安装的阅读器打开
    try {

     //下载文件到SD卡
     File file = downloadFile(url);
     //调用适合的阅读器显示文件
     startActivity(getFileIntent(file));
    } catch (ActivityNotFoundException e) {

     e.printStackTrace();
    }
    return true;
   }
  });
  webView.loadUrl(“http://localhost:8888/OpenFile/fileList.html“);
 }

 /**
  * 下载文件
  * @param fileUrl
  * @return
  */
 public File downloadFile(String fileUrl) {

  File apkFile = null;
  String fileName = fileUrl.substring(fileUrl.lastIndexOf(“/”));
  try {

   if (Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED)) {

    // 获得存储卡的路径
    String sdpath = Environment.getExternalStorageDirectory() + “/”;
    String mSavePath = sdpath + “download”;
    URL url = new URL(fileUrl);
    // 创建连接
    HttpURLConnection conn = (HttpURLConnection) url
      .openConnection();
    conn.connect();
    // 获取文件大小
    //int length = conn.getContentLength();
    // 创建输入流
    InputStream is = conn.getInputStream();

    File file = new File(mSavePath);
    // 判断文件目录是否存在
    if (!file.exists()) {

     file.mkdir();
    }
    apkFile = new File(mSavePath, fileName);
    if(apkFile.exists()){

     return apkFile;
    }
    FileOutputStream fos = new FileOutputStream(apkFile);
    int count = 0;
    int numread = 0;
    byte buf[] = new byte[1024];
    while ((numread = is.read(buf)) != -1) {

     fos.write(buf, 0, numread);
    }
    fos.flush();
    fos.close();
    is.close();
   }
  } catch (Exception e) {

   e.printStackTrace();
  }
  return apkFile;
 }

 /**
  * 获取用于文件打开的intent
  * @param file
  * @return
  */
 public Intent getFileIntent(File file)

 {

  Intent intent = new Intent(“android.intent.action.VIEW”);
  intent.addCategory(“android.intent.category.DEFAULT”);
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  Uri uri = Uri.fromFile(file);
  String fileType = getFileType(file.getName());
  intent.setDataAndType(uri, fileType);
  return intent;
 }
 /**
  * 从配置文件获取要下载的文件后缀和对应的MIME类型
  * @param fileName
  * @return
  */
 public String getFileType(String fileName){

  String [] names = this.mContext.getResources().getStringArray(R.array.file_name_array);
  String [] types = this.mContext.getResources().getStringArray(R.array.file_type_array);
  for(int i=0;i<names.length;i++){

   if(fileName.toLowerCase().indexOf(names[i])>=0){

    return types[i];
   }
  }
  return “”;
 }
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146616.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vs code如何运行_vs如何代码提示

    vs code如何运行_vs如何代码提示第一步:新建C#项目文件夹并将其在VisualStudioCode中打开之后,在底下的终端中输入下方指令创建项目的.csproj文件:dotnetnewconsole第二步:执行下方指令编译代码:dotnetrestore第三步:输入下方指令运行项目。dotnetrun…

    2022年9月9日
    0
  • Python快速编程入门课后习题答案「建议收藏」

    Python快速编程入门课后习题答案「建议收藏」文章目录前言第一章一、填空题二、判断题三、选择题四、简答题第二章一、填空题二、判断题三、选择题四、简答题第三章一、填空题二、判断题三、选择题四、简答题第四章一、单选题二、判断题三、填空题四、程序分析题第五章一、选择题二、判断题三、填空题四、简答题五、程序分析题第六章一、单选题二、判断题三、填空题四、简答题五、程序分析题第七章一、单选题二、判断题三、填空题四、简答题五、程序分析题第八章一、单选题二、…

    2022年6月3日
    156
  • 【报告分享】2021抖音数据报告-巨量算数(附下载)

    【报告分享】2021抖音数据报告-巨量算数(附下载)摘要:报告统计了2021年抖音获赞最多的十大职业,分别是:教师、医生、农民、消防员、交警、教练、外卖员、环卫工人、记者、家政服务员。其中,教师获赞72.9亿次。记录和分享生活,已经成为人们的习惯。报告还披露了人们记录生活的无数种切面。2021年记录了1783万次离别,但也记录了2854万次团圆;有1134万条视频关于放弃,但关于坚持的视频则超过5055万条。来源:巨量算数​如需查看完整报告和报告下载或了解更多,公众号:行业报告智库今日报告分..

    2022年5月8日
    274
  • mac怎么上传文件到服务器_window上传文件到linux

    mac怎么上传文件到服务器_window上传文件到linux前言我们使用mac时,想让本地文件上传至服务器,该怎么办呢windows系统,我们可以使用xftp或者rz命令,那么mac呢?mac系统,我们可以使用sftp、scp或者rz命令,本文介绍sft

    2022年7月30日
    4
  • 提交表单的4种方式_java自定义表单

    提交表单的4种方式_java自定义表单通用提交按钮–>2、提交3、说明:用户提交按钮或图像按钮时,就会提交表单。使用或都可以定义提交按钮,只要将其特性的值设置为“submit”即可,而图像按钮则是通过的type特性值设置为”image”来定义的。因此,只要我们单击一下代码生成的按钮,就可以提交表单。4、阻止表单提交只要在表单中存在上面列出的任何一种按钮,那么相应表单控件拥有焦点的情况下,按回车键就可以提交表单。如果表单里没有提…

    2022年9月1日
    0
  • QT之二级菜单

    QT之二级菜单QT之二级菜单QT之二级菜单开场白效果图上代码可参考文章下代码结尾开场白今天我们一起来了解下,在我们QT中,二级菜单是如何实现的,在上篇我们学习了QT之系统托盘,QT之自定义菜单,QT之样式styleSheet。今天我们在这基础上,增加二级菜单的功能。效果图大家注意下这里箭头,不是用的默认效果哦,还是自定义的好看哈!O(∩_∩)下面这张图示是默认的。上代码voi

    2022年5月4日
    143

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号