【发布时间】:2015-10-07 13:26:36
【问题描述】:
我正在使用 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上的URI,如果前面部分是“primary”,那么使用第一个外部存储路径,如果是其他的,使用第二个,但是感觉不对……可能还有更多确定性的方法来实现这一点?
编辑:这里有一些背景知识。我不需要管理文件的路径。但是如何将这个呈现给用户呢?我绝对不能给他看content://com.android.externalstorage.documents/tree/FF30-E80D%3AImages/document/FF30-E80D%3AImages,那太可怕了。
【问题讨论】: