小编kap*_*amy的帖子

存储访问框架:撤销树权限后保留文件权限

在应用程序中,用户使用ACTION_OPEN_DOCUMENT_TREE意图通过 SAF 选择一个目录,并且用户可以在其中创建各种文件。问题是当用户更改工作目录(始终使用 SAF)时,对这些文件的访问权限就会丢失。ACTION_CREATE_DOCUMENT如何保持或 之类的访问权限ACTION_OPEN_DOCUMENT

这是我的代码

  • 选择目录
private void showDirectoryPicker() {
        Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
               i.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
               i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

        startActivityForResult(i, 12345);
}
Run Code Online (Sandbox Code Playgroud)
  • 处理结果
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != Activity.RESULT_OK) return;
        mDir = data.getData();

        grantUriPermission(getPackageName(), mDir, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        getContentResolver().takePersistableUriPermission(mDir, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
Run Code Online (Sandbox Code Playgroud)
  • 创建文件
 mFile = DocumentFile.fromTreeUri(getContext(), mDir).createFile("text/plain", "some file.txt").getUri();
Run Code Online (Sandbox Code Playgroud)
  • 现在,如果用户更改工作目录,我会释放旧目录的权限,因此:
getContentResolver().releasePersistableUriPermission(mDir, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
revokeUriPermission(mDir, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

mDir = null;

// ask for another …
Run Code Online (Sandbox Code Playgroud)

android saf

5
推荐指数
1
解决办法
1500
查看次数

标签 统计

android ×1

saf ×1