0
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, "content://com.android.externalstorage.documents/tree/downloads");
grantUriPermission(<packagename>, "content://com.android.externalstorage.documents/tree/downloads", Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(Uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
DocumentFile file = pickedDir.createFile(".csv", "xyz.csv");

上面的代码一直工作到 P。从 Android Q 开始,我面临以下问题:

UID XXXXX 没有对 content://com.android.externalstorage.documents/tree/downloads [user 0] 的权限;您可以使用 ACTION_OPEN_DOCUMENT 或相关 API 获得访问权限

清单已经有:

<uses-permission android:name = "android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />

版本:

minSdkVersion 26
targetSdkVersion 26
compileSdkVersion 26

任何帮助表示赞赏

4

1 回答 1

0

你可以看看这个:Work in documents and Create a document

如果你想在外部公共目录中创建一个新文件,你应该使用存储访问框架让用户选择保存这个文件的位置。此文件由您的应用程序创建,因此您的应用程序无需任何存储权限即可访问它。

流程如下:

  1. 使用 ACTION_CREATE_DOCUMENT 启动 Intent。
  2. 用户选择保存新文件的位置(它将根据 Intent extra 中的 mimeType 显示默认位置)
  3. 从onActivityResult中获取Uri,然后使用resolver.openOutputStream(uri)打开一个OutputStream
  4. 将数据写入输出流。
于 2019-08-20T03:55:19.107 回答