听到Android Q引入了一项名为"作用域存储">的新安全功能,该功能限制访问外部存储中的文件。我的问题是我必须将文本文档保存到应用程序中的用户指定位置。这是否需要任何类型的权限,而不是在 Q 设备中READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
?
我的问题是我必须从应用程序将文本文档保存到用户指定的位置
使用ACTION_CREATE_DOCUMENT
允许用户指定位置。您可以使用使用ContentResolver
及其openOutputStream()
方法来获取从ACTION_CREATE_DOCUMENT
获取的Uri
的OutputStream
。然后,您可以将文本写入该OutputStream
。
这是否需要任何类型的权限,而不是在 Q 设备中READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE?
ACTION_CREATE_DOCUMENT
不需要任何权限,可以回到Android 4.4。
或者,您可以将文件写入由getExternalFilesDir()
onContext
标识的目录。这部分外部存储对 Android Q 上的用户可见,不需要其他权限。
或者,如果您将targetSdkVersion
保持在 28 或更低,则可以使用WRITE_EXTERNAL_STORAGE
并在您想要的位置书写,就像在 Android 9.0+ 上所做的那样。但是,请记住,这种方法将停止与Android R一起使用,并且当您将targetSdkVersion
提高到28岁以上时(例如,为了遵守2020年的Play商店要求)。因此,使用ACTION_CREATE_DOCUMENT
,或者getExternalFilesDir()
,是更好的长期答案。