android intent開啟各種格式文件方法
阿新 • • 發佈:2019-02-04
我們開發的時候經常碰到開啟各種文件,目前的應用處理方式 基本都是依賴於三方軟體開啟 ,而不是在應用內開啟,因為檔案格式有很多,倘若都在應用內開啟的話,肯定要增加很大的開發時間和開發成本,而且實現效果沒有一些三方的app實現的效果好。
話不多說,貼上程式碼
工具類
import java.io.File; import android.content.Intent; import android.net.Uri; /** * android Intent開啟各種型別檔案((PDF、word、excel、ppt、chm) */ public class IntentDocumentView { // android獲取一個用於開啟PPT檔案的intent public static Intent getPptFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); return intent; } // android獲取一個用於開啟Excel檔案的intent public static Intent getExcelFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/vnd.ms-excel"); return intent; } // android獲取一個用於開啟Word檔案的intent public static Intent getWordFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/msword"); return intent; } // android獲取一個用於開啟CHM檔案的intent public static Intent getChmFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/x-chm"); return intent; } // android獲取一個用於開啟文字檔案的intent public static Intent getTextFileIntent(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); if (paramBoolean) { Uri uri1 = Uri.parse(param); intent.setDataAndType(uri1, "text/plain"); } else { Uri uri2 = Uri.fromFile(new File(param)); intent.setDataAndType(uri2, "text/plain"); } return intent; } // android獲取一個用於開啟PDF檔案的intent public static Intent getPdfFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/pdf"); return intent; } // android獲取一個用於開啟圖片檔案的intent public static Intent getPicturefFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "image/*"); return intent; } // android獲取一個用於開啟壓縮包的intent (手機需安裝能開啟壓縮檔案的相關軟體) public static Intent getZipRarFileIntent(String param) { Intent intent = new Intent("android.intent.action.VIEW"); intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "application/x-gzip"); return intent; } }
上面這個是核心的工具類,就是開啟各種文件的跳轉寫法,然後在對應的點選事件呼叫 就可以,舉列
判斷檔案格式 ,然後呼叫工具類內對應的方法。protected void openFile(String path) { String format = path.substring(path.lastIndexOf(".") + 1); File file = new File(path); try { if (file.exists() || FileUtil.fileAvailable(file)) { if (TextUtils.equals("doc", format) || TextUtils.equals("docx", format)) { mContext.startActivity(IntentDocumentView.getWordFileIntent(path)); } else if (TextUtils.equals("xls", format) || TextUtils.equals("xlsx", format)) { mContext.startActivity(IntentDocumentView.getExcelFileIntent(path)); } else if (TextUtils.equals("zip", format) || TextUtils.equals("rar", format)) { mContext.startActivity(IntentDocumentView.getZipRarFileIntent(path)); }else if (TextUtils.equals("pdf", format) || TextUtils.equals("PDF", format)) { mContext.startActivity(IntentDocumentView.getPdfFileIntent(path)); }else { ToastUtil.showToast(mContext, "新增檔案型別,請聯絡軟體開發商"); } } else { ToastUtil.showToast(mContext, "請先下載檔案"); } } catch (Exception e) { e.printStackTrace(); ToastUtil.showToast(mContext, "請先安裝可以檢視" + format + "格式的軟體"); } }
如果大家還有其他問題,可以加入我的開發群討論交流:
開發一群:454430053開發二群:537532956