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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 《增长黑客》节选与笔记[通俗易懂]

    《增长黑客》节选与笔记[通俗易懂]《增长黑客》节选与笔记自序1.1 创业家的黑暗前传1.2 增长黑客的胜利1.3 什么是“增长黑客”1.4 增长黑客的职责和特质1.5 一切用数据说话1.6 增长黑客担任的团队角色1.7 如何招聘增长黑客1.8 如何成为增长黑客1.9 增长黑客的常用工具箱第2章 创造正确的产品2.1 Instagram重生记2.2 PMF,探寻产品与市场的完美契合2.3 拒绝…

    2022年5月13日
    37
  • TCP/IP三次握手与四次挥手学习笔记(二)

    TCP/IP三次握手与四次挥手学习笔记(二)

    2022年2月14日
    141
  • java如何获取服务器路径

    java如何获取服务器路径一,别人的做法StringcontextPath=request.getContextPath();StringrealPath=request.getSession().getServletContext().getRealPath(“/”);StringbasePath=request.getScheme()+”://

    2022年7月27日
    7
  • mysql 时间戳转日期格式[通俗易懂]

    mysql 时间戳转日期格式[通俗易懂]一、MySQL日期和时间戳的转换1.日期转时间戳selectUNIX_TIMESTAMP(‘2018-12-2512:25:00’);结果:15457119002.时间戳转日期:FROM_UNIXTIME(unix_timestamp)–unix_timestamp为时间戳selectFROM_UNIXTIME(1545711900);结果:2018-12-251…

    2022年6月21日
    43
  • Q学习(Q-learning)入门小例子及python实现

    Q学习(Q-learning)入门小例子及python实现一、从马尔科夫过程到Q学习#有一定基础的读者可以直接看第二部分Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(MarkovDecisionProcesses,MDPs)为理论基础。标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中:S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转…

    2022年10月4日
    2
  • MS17010漏洞利用总结

    MS17010漏洞利用总结0x01常规打法扫描是否存在ms17-010漏洞:nmap-n-p445–scriptsmb-vuln-ms17-010192.168.1.0/24–openMSF常规漏洞利用:msf>useexploit/windows/smb/ms17_010_eternalbluemsf>setrhost192.168.1.112反向打:msf>setpayloadwindows/x64/meterpreter/reverse_tcpm

    2022年6月12日
    91

发表回复

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

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