如何进入SAF框架可以对文件夹进行操作

img


如图从手机文件管理器中进入的saf可以多选文件夹并且进行移动删除重命名等操作,但是我自己写的代码就只能查看,如何实现。

img

【以下回答由 GPT 生成】

答案:

在Android中使用SAF框架对文件夹进行操作主要涉及以下步骤:

1. 在AndroidManifest.xml中添加必要的权限和提供者。
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
    ...
    <provider
        android:name="androidx.documentfile.provider.DocumentFileProvider"
        android:authorities="com.example.myapp.documents"
        android:exported="false"
        android:grantUriPermissions="true">
        <intent-filter>
            <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
        </intent-filter>
    </provider>
</application>
  1. 创建选择文件夹的Intent并启动它,获取用户选择的文件夹的URI。
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_FOLDER);
  1. 在onActivityResult方法中处理返回的结果,获取文件夹的URI。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_FOLDER && resultCode == Activity.RESULT_OK) {
        if (data != null && data.getData() != null) {
            Uri folderUri = data.getData();
            // 可以使用folderUri进行文件夹的操作
            // 例如移动、删除、重命名等
        }
    }
}
  1. 对文件夹进行操作时,使用DocumentFile类来代表文件夹,并通过getContentResolver().takePersistableUriPermission()方法来获取持久化的权限。
DocumentFile folder = DocumentFile.fromTreeUri(context, folderUri);
getContentResolver().takePersistableUriPermission(folderUri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
  1. 通过DocumentFile类提供的方法来执行文件夹操作。
// 移动文件夹
DocumentFile newParentFolder = DocumentFile.fromTreeUri(context, newParentFolderUri);
folder.moveTo(newParentFolder);

// 删除文件夹
folder.delete();

// 重命名文件夹
folder.renameTo("New Folder Name");

请注意,SAF框架的文件夹操作需要用户进行选择和授权,所以在实际使用中,要注意引导用户进行相应的操作,并处理权限相关的逻辑。

以上是使用SAF框架在Android中对文件夹进行操作的基本步骤和代码示例。如果你遇到了具体的问题或错误,请提供更多详细的信息以便排查和解决。 ```


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^