Java 如何从Intent.ACTION\u获取内容的完整路径?

Java 如何从Intent.ACTION\u获取内容的完整路径?,java,android,Java,Android,我试图把选定的文件,而不是独家的图像,它可以是任何文件,从文件选择器意图到一个zip文件。我需要完整的文件路径来实现这一点,但intent只提供uri路径 我尝试了.getPath,但它没有给出文件的实际路径 我尝试了getRealPathFromRealURI: 我尝试了File=new File,File.getPath 这是我的代码: public void onActivityResult(int requestCode, int resultCode, Intent resul

我试图把选定的文件,而不是独家的图像,它可以是任何文件,从文件选择器意图到一个zip文件。我需要完整的文件路径来实现这一点,但intent只提供uri路径

我尝试了.getPath,但它没有给出文件的实际路径 我尝试了getRealPathFromRealURI: 我尝试了File=new File,File.getPath 这是我的代码:

    public void onActivityResult(int requestCode, int resultCode, Intent result){
        if(requestCode == 111) {
            if(null != result) { // checking empty selection
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    if(null != result.getClipData()) { // checking multiple selection or not
                        for(int i = 0; i < result.getClipData().getItemCount(); i++) {
                            String uri = result.getClipData().getItemAt(i).getUri().getPath();
                            uriList.add(uri);
                            Log.d("PATH: ",uri);
                        }
                        confirmationDialog();
                    } else {
                        String uri = result.getData().getPath();
                        uriList.add(uri);
                        Log.d("PATH: ",uri);
                        confirmationDialog();
                    }
                }else{Toast.makeText(getApplicationContext(),
                        "An error has occured: API level requirements not met",Toast.LENGTH_SHORT).show();};
            }
        }
    }
它应该给出实际路径,例如:/sdcard/filename.example

相反,它给了我:/document/9016-4ef8:filename.example

Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);

cursor.close();
System.out.println("picturePath +"+ picturePath );  //path of sdcard

在这里找到:

好的,除了内置的文件资源管理器之外,我还使用了另一个文件资源管理器来修复它。在我的例子中,我使用了Cx文件资源管理器,不同的文件资源管理器返回不同的值。

拾取/获取文件的实际路径:

val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "*/*"
startActivityForResult(intent, 1)
onActivityResult:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == 1 && resultCode == Activity.RESULT_OK) {
        val file = data?.data?.let {
            getFileFromUri(requireContext().contentResolver, uri, requireContext().cacheDir)
        }
    }
}
获取文件:

private fun getFileFromUri(contentResolver: ContentResolver, uri: Uri, directory: File): File {
    val file =
        File.createTempFile("suffix", ".prefix", directory)
    file.outputStream().use {
        contentResolver.openInputStream(uri)?.copyTo(it)
    }

    return file
}

一旦我们得到文件,我们就可以得到文件的实际路径。

需要完整的文件路径吗?要停止文件未找到异常,请尝试file.getAbsolutePathResult.getData将为您提供URI本身,即。content://.thanks 它起作用了。。