ACTION_OPEN_DOCUMENT返回“conent:/com.android ...”

时间:2016-09-02 09:31:16

标签: android

我使用ACTION_OPEN_DOCUMENT运行一个意图。

它返回一个带有“content:/com.android.providers.downloads.documents/document”之类路径的Uri

如何从此返回的Uri中获取正确的路径?

2 个答案:

答案 0 :(得分:0)

那是Uri而不是Uri with a path like.你得到的实际文件是使用以下代码段保存的。

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

答案 1 :(得分:0)

使用系统文件选择器选择任何文件:

val intent = Intent(Intent.ACTION_GET_CONTENT) //ACTION_OPEN_DOCUMENT (same procedure)
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
}

有了文件,我们可以获得进一步处理的实际路径