使用Android系统支持的或者第三方APK打开各种类型的文件

原理:根据文件名后缀,判断出文件的类型,如PPT/TXT/PDF等类型,设置Intent的Data and Type

FileHelper源代码

package com.example.common;import java.io.File;import android.content.Context;import android.content.Intent;import android.net.Uri;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;public class FileHelper {    private static final String TAG = "FileHelper";    public static void openFile(String filePath, Context context){        if(TextUtils.isEmpty(filePath)||null == context){            Log.e(TAG, "--openFile--filePath is empty or context is null, retun");            return;        }        File file = new File(filePath);        if(null != file && file.exists()){            String fileName = file.getName();            Log.d(TAG, "--file is exist, filePath:"+filePath+"--fileName:"+fileName);            String fileType = "*/*";            String end = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase();            if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||                      end.equals("xmf")||end.equals("ogg")||end.equals("wav")){                fileType = "audio/*";            }            else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||                      end.equals("jpeg")||end.equals("bmp")||end.equals(".pic")){                fileType = "image/*";            }            else if(end.equals("txt")){                fileType = "text/plain";            }            else if(end.equals("pdf")){                fileType = "application/pdf";            }            else if(end.equals("doc")){                fileType = "application/msword";            }            else if(end.equals("xls")){                fileType = "application/vnd.ms-excel";            }            else if(end.equals("ppt")){                fileType = "application/vnd.ms-powerpoint";            }            // 可以扩展自己需要的类型            Log.d(TAG, "--fileType:"+fileType);            Intent intent = new Intent();            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            intent.setAction(android.content.Intent.ACTION_VIEW);            intent.setDataAndType(Uri.fromFile(file), fileType);            try {                context.startActivity(intent);            } catch (Exception e) {                e.printStackTrace();                Log.e(TAG, "--can not startActivity--");                Toast.makeText(context, "暂不支持打开该文件", Toast.LENGTH_SHORT).show();            }        }    }}

注意点
1. 在使用context.startActivity(intent);使,要加上try catch,不然若不存在打开该类型的应用,则会crash
异常如下:

 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///sdcard/1.ppt typ=application/vnd.ms-powerpoint flg=0x10000000 }
  1. 该工具类并未判断文件是否真的类型和后缀一致。如“.pic”结尾的文本文件,用系统“图库”打开可能是黑的或者出现异常。
    异常如下:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.android.gallery3d.data.Path.getPrefix()' on a null object reference07-07 16:08:20.672: E/AndroidRuntime(7816):     at com.android.gallery3d.data.DataManager.getDefaultSetOf(DataManager.java:278)07-07 16:08:20.672: E/AndroidRuntime(7816):     at com.android.gallery3d.app.GalleryActivity.startViewAction(GalleryActivity.java:206)07-07 16:08:20.672: E/AndroidRuntime(7816):     at com.android.gallery3d.app.GalleryActivity.initializeByIntent(GalleryActivity.java:96)07-07 16:08:20.672: E/AndroidRuntime(7816):     at com.android.gallery3d.app.GalleryActivity.onCreate(GalleryActivity.java:73)07-07 16:08:20.672: E/AndroidRuntime(7816):     at android.app.Activity.performCreate(Activity.java:5990)07-07 16:08:20.672: E/AndroidRuntime(7816):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)07-07 16:08:20.672: E/AndroidRuntime(7816):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)07-07 16:08:20.672: E/AndroidRuntime(7816):     ... 10 more07-07 16:08:20.702: W/ActivityManager(931):   Force finishing activity 1 com.android.gallery3d/.app.GalleryActivity

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. android Material主题中的button效果
  6. Error:(17, 0) Could not find method android() for arguments
  7. Android多媒体学习五:利用Service实现背景音乐的播放
  8. Android-AIDL通信
  9. js判断是否在微信浏览器中打开

随机推荐

  1. <JVM中篇:字节码与类的加载篇>03-类的加载过
  2. PyTorch安装
  3. NPS内网穿透穿透
  4. <JVM中篇:字节码与类的加载篇>04-再谈类的加
  5. BitWarden密码管理器自建
  6. Docker搭建Poste.io邮箱【保姆级教程】
  7. <JVM下篇:性能监控与调优篇>01-概述篇-02-
  8. <JVM下篇:性能监控与调优篇>03-JVM监控及
  9. <JVM下篇:性能监控与调优篇>补充:浅堆深堆
  10. <JVM下篇:性能监控与调优篇>补充:使用OQL语