Android Q 中如何申请外部文件访问权限?

How can I ask for external file access permission in Android Q?

听说 Android Q 引入了一种名为 “Scoped Storage” 的新安全功能,它限制访问外部存储中的文件。我的问题是我必须将文本文档从应用程序保存到用户指定的位置。这是否需要任何类型的许可,而不是 Q 设备中的 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE

My problem is I have to save a text document to a user specified location from the App

使用ACTION_CREATE_DOCUMENT允许用户指定位置。您可以使用 ContentResolver 及其 openOutputStream() 方法为从 ACTION_CREATE_DOCUMENT 返回的 Uri 获取 OutputStream。然后,您可以将文本写入 OutputStream.

Is this requires any kind of permission rather than READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE in Q devices?

ACTION_CREATE_DOCUMENT 不需要任何权限,可以回到 Android 4.4.

或者,您可以将文件写入 Context 上由 getExternalFilesDir() 标识的目录。 Android Q 上的用户可以看到这部分外部存储,不需要额外的权限。

或者,如果您将 targetSdkVersion 保持在 28 或更低,您可以使用 WRITE_EXTERNAL_STORAGE 并在您想要的地方写入,就像您在 Android 9.0+ 上所做的那样。但是,请记住,这种方法将停止使用 Android R 并且当您将 targetSdkVersion 提高到 28 时(例如,为了遵守 2020 年的 Play 商店要求)。因此,使用 ACTION_CREATE_DOCUMENTgetExternalFilesDir() 是更好的长期答案。