簡體   English   中英

如何獲取使用 Intent.ACTION_OPEN_DOCUMENT 選擇的文件的文件擴展名?

[英]How to get file extension of a file picked with Intent.ACTION_OPEN_DOCUMENT?

我想獲取我使用 Intent.ACTION_OPEN_DOCUMENT 選擇的文件的文件擴展名。 如何獲得?

這是我啟動選擇器的方式:

private void startFilePicker(){
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    startActivityForResult(intent, CODE_ACTION_OPEN_DOCUMENT_FILE);
}

這是選擇文件時的回調:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);


        //region New Picker

        if (requestCode == CODE_ACTION_OPEN_DOCUMENT_FILE){
            if (resultCode == RESULT_OK){

                if (data != null){
                    if (data.getData() != null){
                        Uri uri = data.getData();
                        //Get file extension here.
                    }
                }
            }
        }
    }

當我嘗試通過執行uri.getPath()獲取文件路徑時,我得到類似image:105571acc=1;doc=9204 所以我無法從路徑中獲取它。

問題是如何確定選擇文件的文件擴展名?

創建這兩種方法...

public  String getPath(Context context, Uri uri) throws URISyntaxException {
    if ("content".equalsIgnoreCase(uri.getScheme())) {
        String[] projection = { "_data" };
        Cursor cursor = null;
        try {
            cursor = context.getContentResolver().query(uri, projection, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow("_data");
            if (cursor.moveToFirst()) {
                return cursor.getString(column_index);
            }
        } catch (Exception e) {
            // Eat it
        }
    }
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

public String getFileExtension(String filePath){
    String extension = "";
    try{
        extension = filePath.substring(filePath.lastIndexOf("."));
    }catch(Exception exception){
      e("Err", exception.toString()+"");
    }
    return  extension;
}

然后用這個

if (data.getData() != null){
   try{
     Uri uri = data.getData();
     //Get file extension here.
     String filePath = getPath(YourActivity.this, uri);
     String fileExtension = getFileExtension(filePath);
     File file = new File(filePath);
    }catch(Exception e){
         e("Err", e.toString()+"");
    }
}

調用內容解析器,並在uri上對顯示名稱執行query()。

從uri獲得路徑,獲得路徑或獲得真實路徑的所有解決方案都是廢話。

您可以使用以下方法:

 public static String getMimeType(String url) {
    String type = null;
    String extension = MimeTypeMap.getFileExtensionFromUrl(url);
    if (extension != null) {
        MimeTypeMap mime = MimeTypeMap.getSingleton();
        type = mime.getMimeTypeFromExtension(extension);
    }
    return type;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM