简单的Android目录选择器 - 如何实现?

27

我刚开始在Android Studio编码,感觉棒极了..!!

如何编写“目录选择器”的代码。即,当单击按钮时,显示一个简单的对话框/活动屏幕,其中可以显示目录列表。

另外,希望将该目录中的所有文件存储到一个数组变量中(一旦单击确定按钮)。

附注:我在这里搜索并找到了一些很酷的“文件选择器”,但我正在寻找“目录选择器”!

谢谢提前。

5个回答

42

尝试使用Intent.ACTION_OPEN_DOCUMENT_TREE。

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); 
    i.addCategory(Intent.CATEGORY_DEFAULT);
    startActivityForResult(Intent.createChooser(i, "Choose directory"), 9999);
}

从onActivityResult data.getData()获取结果Uri。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch(requestCode) {
        case 9999:
            Log.i("Test", "Result URI " + data.getData());
            break;
    }
}

12
适用于API 21及以上版本。 - Eslam Sameh Ahmed
3
您可以使用此答案获取实际的目录路径:https://dev59.com/Hl0b5IYBdhLWcg3wA9Eb#29789495 - M. Noreikis
4
我的最低SDK版本是API 19。是否有一种类似的方法可以在该版本上实现相同的功能? - AurumTechie
1
@AurumTechie,您是否处理过API 19?如果是,请建议一种在API 19中克服此问题的方法。 - Udhaya

5

3

1

-9
请使用以下代码选择目录:
        Intent result = new Intent();
        result.putExtra("chosenDir", path);
        setResult(RESULT_OK, result);

而要获取所选路径,则覆盖 onActivityResult:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode == PICK_DIRECTORY && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        String path = (String) extras.get("chosenDir");

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接