从内容URI获取目录路径

马克·普兰诺·莱赛

我正在使用SDK的ACTION_OPEN_DOCUMENT_TREE意图让用户选择目录。这是代码:

private static final int REQUEST_PICK_FOLDER = 1;

// …

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_add_folder: {
            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
            startActivityForResult(intent, REQUEST_PICK_FOLDER);
            return true;

        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_PICK_FOLDER && resultCode == Activity.RESULT_OK) {
        addFolder(data.getData());
    }
}

private void addFolder(Uri uri) {
    Uri docUri = DocumentsContract.buildDocumentUriUsingTree(uri, DocumentsContract.getTreeDocumentId(uri));
    Log.d(TAG, "Folder added: " + docUri.toString());
}

我有一个URI(可能)指向刚刚选择的文件夹。这是示例输出:Folder added: content://com.android.externalstorage.documents/tree/FF30-E80D%3AImages/document/FF30-E80D%3AImages

现在,我需要获取绝对路径,在这种情况下,需要将其转换为/storage/sdcard1/Images我在aFileChooser中找到了一些似乎有效的代码,但不适用于SD卡,这是我的主要用例。

%3A如果前面的部分是“ primary”,我可能会拆分URI ,然后使用第一个外部存储路径,如果还有其他原因,则使用第二个外部存储路径,但是感觉不对……可能有更确定的方法来实现此目的?

编辑:这是一些背景。我不需要管理文件的路径。但是如何向用户展示呢?我绝对不能告诉他content://com.android.externalstorage.documents/tree/FF30-E80D%3AImages/document/FF30-E80D%3AImages,那太可怕了。

常用软件

现在,我需要获取绝对路径,在这种情况下,该路径会转换为/ storage / sdcard1 / Images。

这是不可能的。完全不需要Uri指向文件,更不用说可以访问的文件了。

使用ContentResolveropenInputStream()获取InputStream内容,然后以这种方式阅读。这与您处理Web服务器的URL(用于在Web页面或其他内容上HttpUrlConnection获取)的方式没有明显不同InputStream

但是如何向用户展示呢?

我不知道“这个”是什么。但是,您可以获得与content关联的建议显示名称

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章