在Android開發中,經過需要用到調用外部應用來打開一個文件,
而且,該文件可能是圖片、視頻、音頻、CAD文件、壓縮包文件等等……
/**
* 打開一個文件
*
* @param filePath
* 文件的絕對路徑
*/
private void openFile(final String filePath) {
String ext = filePath.substring(filePath.lastIndexOf('.')).toLowerCase(Locale.US);
StrictMode.VmPolicy defultVmPolicy = null;
boolean isNeedMatch = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N;
try {
if (isNeedMatch) {
defultVmPolicy = StrictMode.getVmPolicy();
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String temp = ext.substring(1);
String mime = mimeTypeMap.getMimeTypeFromExtension(temp);
mime = TextUtils.isEmpty(mime) ? "" : mime;
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(filePath);
intent.setDataAndType(Uri.fromFile(file), mime);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(), "無法打開后綴名為." + ext + "的文件!", Toast.LENGTH_LONG).show();
} finally {
if (isNeedMatch) StrictMode.setVmPolicy(defultVmPolicy);
}
}
上面用到MimeTypeMap 類,用于獲取MIME映射信息,這個方法簡單實用,不用自己去寫一大堆MIME映射了……
如果mimeTypeMap.getMimeTypeFromExtension(temp)獲取的值為null時,設置為""可以讓用戶自己選擇手機已安裝的程序進行打開文件