如何获取使用Intent.ACTION_OPEN_DOCUMENT选择的文件的文件扩展名?

时间:2017-10-26 07:24:43

标签: java android

我想获取我使用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的内容。所以我无法从路径中得到它。

问题是如何确定所选文件的文件扩展名?

3 个答案:

答案 0 :(得分:3)

创建这两种方法......

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()+"");
    }
}

答案 1 :(得分:0)

调用内容解析程序并在uri上执行查询()以获取显示名称。

所有带路径,获取路径或从uri获得真实路径的解决方案都是牛市。

答案 2 :(得分:0)

您可以使用此方法:

 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;
}