首先得知道文件的具體類型,也即是文件的後綴名
-
通過對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;
}
最後就是根據文件類型進行調用