返回

Android 多选文件夹:使用 SAF Picker 突破系统限制

Android

在 Android 中使用 SAF Picker 选择多个文件夹

简介

在 Android 系统中,使用内置的 Intent.ACTION_OPEN_DOCUMENT_TREE 意图只能从文件中选择一个文件夹。本文将介绍如何使用第三方库 SAF Picker 来实现选择多个文件夹的功能。

SAF Picker 简介

SAF Picker 是一个 Android 库,它允许你从设备中选择多个文件夹。它提供了直观的界面和用户友好的功能,简化了文件选择的流程。

使用 SAF Picker 选择多个文件夹

1. 添加 SAF Picker 依赖项

首先,在你的项目中添加 SAF Picker 依赖项:

implementation 'com.github.anthonycr:android-safepicker:1.1.2'

2. 创建新的意图

接下来,创建一个新的意图并将其设置为 ACTION_OPEN_DOCUMENT_TREE

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addCategory(Intent.CATEGORY_DEFAULT);

3. 设置 SAF Picker 类

将 SAF Picker 的 SAFPermissionActivity 类设置为意图的目标:

intent.setClassName(this, "com.github.anthonycr.safepicker.SAFPermissionActivity");

4. 启动意图

启动意图并处理返回的结果:

startActivityForResult(intent, REQUEST_CODE);

5. 获取选定的文件夹

onActivityResult 方法中,检查结果是否成功,如果是,则可以使用 SAFPermissionActivitygetDocumentTreePaths(Intent data) 方法来获取所选文件夹的路径。

if (resultCode == RESULT_OK) {
    ArrayList<String> paths = SAFPermissionActivity.getDocumentTreePaths(data);
    // 现在你可以使用所选文件夹的路径
}

代码示例

以下是一个完整的代码示例,展示了如何使用 SAF Picker 选择多个文件夹:

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button_select_folders).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                intent.setClassName(MainActivity.this, "com.github.anthonycr.safepicker.SAFPermissionActivity");
                startActivityForResult(intent, REQUEST_CODE);
            }
        });
    }

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

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            ArrayList<String> paths = SAFPermissionActivity.getDocumentTreePaths(data);
            // 现在你可以使用所选文件夹的路径
        }
    }
}

常见问题解答

1. 如何限制可以选择的文件类型?

SAF Picker 不支持限制可以选择的文件类型。

2. 如何设置默认文件夹?

SAF Picker 不支持设置默认文件夹。

3. 如何禁用创建新文件夹的功能?

SAF Picker 不支持禁用创建新文件夹的功能。

4. 如何自定义文件选择器的界面?

SAF Picker 不支持自定义文件选择器的界面。

5. 是否有其他选择多个文件夹的库?

除了 SAF Picker,还有其他可用于选择多个文件夹的库,例如:

结论

通过使用 SAF Picker,你可以轻松地在 Android 中选择多个文件夹。这对于需要从设备中选择多个文件夹的应用程序非常有用。本文提供了分步说明和代码示例,以帮助你轻松实现此功能。