Android通過Intent打開各種文件類型

首先得知道文件的具體類型,也即是文件的後綴名

  • 通過對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;
    }

最後就是根據文件類型進行調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章