首先得知道文件的具体类型,也即是文件的后缀名
-
通过对File文化进行截取得到扩展名
-
或者直接获取文件路径的后缀名 获取最后一个下标“.”的位置 然后字符串截取
取得扩展名 String end = file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length()).toLowerCase(Locale.getDefault());
我们还需要知道各种类型文件的dataType
private static final String DATA_TYPE_ALL = "*/*";//未指定明确的文件类型,不能使用精确类型的工具打开,需要用户选择
private static final String DATA_TYPE_APK = "application/vnd.android.package-archive"; 打开apk
private static final String DATA_TYPE_VIDEO = "video/*";打开视频
private static final String DATA_TYPE_AUDIO = "audio/*";打开音频
private static final String DATA_TYPE_HTML = "text/html";打开Html
private static final String DATA_TYPE_IMAGE = "image/*";打开图片
private static final String DATA_TYPE_PPT = "application/vnd.ms-powerpoint";打开PPT
private static final String DATA_TYPE_EXCEL = "application/vnd.ms-excel";打开Excel
private static final String DATA_TYPE_WORD = "application/msword";打开Word
private static final String DATA_TYPE_CHM = "application/x-chm";打开chm(这个格式可以百度下)
private static final String DATA_TYPE_TXT = "text/plain";打开txt
private static final String DATA_TYPE_PDF = "application/pdf";打开PDF
private static final String DATA_TYPE_VCF = "application/pdf";打开VCF
private static final String DATA_TYPE_SWF = "flash/*";打开SWF
// 封装Android获取一个用于打开各类文件的intent
/**
*
* @param filePath 文件路径
* @param context
* @param type 文件类型
* @return
*/
private static Intent getTxtFileIntent(String filePath, Context context,String type) {
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//getUri方法 下面已写
Uri uri=getUri(intent,filePath,context);
intent.setDataAndType(uri, type);
return intent;
}
Android7.0获取文件路径改变了行为,去除项目中传递 file:// 类似格式的 Uri,所以7.0以上采用FileProvider
/**
* 获取对应文件的Uri
* @param intent 相应的Intent
* @param param path
* @return
*/
private static Uri getUri(Intent intent, String param,Context context) {
Uri uri = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//判断版本是否在7.0以上
uri =
FileProvider.getUriForFile(context,
context.getPackageName() + ".FileProvider",
new File(param));
//添加这一句表示对目标应用临时授权该Uri所代表的文件
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
uri = Uri.fromFile(new File(param));
}
return uri;
}
最后就是根据文件类型进行调用