|
@@ -0,0 +1,284 @@
|
|
|
|
+package com.sjkj.appthreefloor_tsgz.utils;
|
|
|
|
+
|
|
|
|
+import android.annotation.SuppressLint;
|
|
|
|
+import android.content.Context;
|
|
|
|
+import android.content.Intent;
|
|
|
|
+import android.content.pm.PackageManager;
|
|
|
|
+import android.content.pm.ResolveInfo;
|
|
|
|
+import android.net.Uri;
|
|
|
|
+import android.os.Build;
|
|
|
|
+
|
|
|
|
+import androidx.core.content.FileProvider;
|
|
|
|
+
|
|
|
|
+import com.sjkj.base_lib.utils.AppTools;
|
|
|
|
+
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Locale;
|
|
|
|
+
|
|
|
|
+public class OpenFileUtil {
|
|
|
|
+ public static String fileName;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 判断Intent 是否存在 防止崩溃
|
|
|
|
+ *
|
|
|
|
+ * @param context
|
|
|
|
+ * @param intent
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static boolean isIntentAvailable(Context context, Intent intent) {
|
|
|
|
+ final PackageManager packageManager = context.getPackageManager();
|
|
|
|
+ @SuppressLint("WrongConstant") List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
|
|
|
|
+ PackageManager.GET_ACTIVITIES);
|
|
|
|
+ return list.size() > 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static String getName() {
|
|
|
|
+ return fileName;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static Intent openFile(Context context, String filePath) {
|
|
|
|
+
|
|
|
|
+ File file = new File(filePath);
|
|
|
|
+ if (!file.exists())
|
|
|
|
+ return null;
|
|
|
|
+ /* 取得扩展名 */
|
|
|
|
+ String end = file.getName().substring(file.getName().lastIndexOf(".") + 1, file.getName().length()).toLowerCase(Locale.getDefault());
|
|
|
|
+ /* 依扩展名的类型决定MimeType */
|
|
|
|
+ fileName = end;
|
|
|
|
+ if (end.equals("m4a") || end.equals("mp3") || end.equals("mid") || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
|
|
|
|
+ return getAudioFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("3gp") || end.equals("mp4")) {
|
|
|
|
+ return getVideoFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("jpg") || end.equals("gif") || end.equals("png") || end.equals("jpeg") || end.equals("bmp")) {
|
|
|
|
+ return getImageFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("apk")) {
|
|
|
|
+ return getApkFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("ppt") || end.equals("pptx")) {
|
|
|
|
+ return getPptFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("xls") || end.equals("xlsx")) {
|
|
|
|
+ return getExcelFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("doc") || end.equals("docx")) {
|
|
|
|
+ return getWordFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("pdf")) {
|
|
|
|
+ return getPdfFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("chm")) {
|
|
|
|
+ return getChmFileIntent(context, filePath);
|
|
|
|
+ } else if (end.equals("txt")) {
|
|
|
|
+ return getTextFileIntent(context, filePath, false);
|
|
|
|
+ } else {
|
|
|
|
+ return getAllIntent(context, filePath);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开APK文件的intent
|
|
|
|
+ public static Intent getAllIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent();
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.setAction(Intent.ACTION_VIEW);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "*/*");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "*/*");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开APK文件的intent
|
|
|
|
+ public static Intent getApkFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent();
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.setAction(Intent.ACTION_VIEW);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.android.package-archive");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.android.package-archive");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开VIDEO文件的intent
|
|
|
|
+ public static Intent getVideoFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ intent.putExtra("oneshot", 0);
|
|
|
|
+ intent.putExtra("configchange", 0);
|
|
|
|
+ // Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "video/*");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "video/*");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开AUDIO文件的intent
|
|
|
|
+ public static Intent getAudioFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ intent.putExtra("oneshot", 0);
|
|
|
|
+ intent.putExtra("configchange", 0);
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "audio/*");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "audio/*");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开Html文件的intent
|
|
|
|
+ public static Intent getHtmlFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Uri uri = Uri.parse(param).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param).build();
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.setDataAndType(uri, "text/html");
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开图片文件的intent
|
|
|
|
+ public static Intent getImageFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "image/*");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "image/*");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开PPT文件的intent
|
|
|
|
+ public static Intent getPptFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开Excel文件的intent
|
|
|
|
+ public static Intent getExcelFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.ms-excel");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/vnd.ms-excel");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开Word文件的intent
|
|
|
|
+ public static Intent getWordFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/msword");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/msword");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开CHM文件的intent
|
|
|
|
+ public static Intent getChmFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/x-chm");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/x-chm");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开文本文件的intent
|
|
|
|
+ public static Intent getTextFileIntent(Context context, String param, boolean paramBoolean) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (paramBoolean) {
|
|
|
|
+ Uri uri1 = Uri.parse(param);
|
|
|
|
+ intent.setDataAndType(uri1, "text/plain");
|
|
|
|
+ } else {
|
|
|
|
+
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "text/plain");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri2 = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri2, "text/plain");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Android获取一个用于打开PDF文件的intent
|
|
|
|
+ public static Intent getPdfFileIntent(Context context, String param) {
|
|
|
|
+
|
|
|
|
+ Intent intent = new Intent("android.intent.action.VIEW");
|
|
|
|
+ intent.addCategory("android.intent.category.DEFAULT");
|
|
|
|
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
|
|
|
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//标签,授予目录临时共享权限
|
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0之后
|
|
|
|
+ Uri uri = FileProvider.getUriForFile(context, AppTools.getPackageNameProvider(), new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/pdf");
|
|
|
|
+ } else {
|
|
|
|
+ Uri uri = Uri.fromFile(new File(param));
|
|
|
|
+ intent.setDataAndType(uri, "application/pdf");
|
|
|
|
+ }
|
|
|
|
+ return intent;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|