我有一个应用程序,可以保存到文本文件,并在其他地方将数据库复制到存储,两者都使用存储访问框架。 在 Android Studio 模拟器(API 26 和 28)上进行测试,唯一可用的选项是下载和 SD 卡。但在物理设备(API 26 和 29)上,您可以在任何地方保存。我需要做些什么才能使模拟器像设备一样工作吗?
在真实设备上配置内部和外部存储有多种不同的方式,并且可用的方式随着时间的推移而变化。
最初智能手机的“内部存储空间”非常有限,大多数用户存储空间由 SD 卡提供。 HTC Dream 只有 256Mb 的内部存储空间和高达 16Gb 的 SD 卡。
你可以用这些原始智能手机做的事情更加有限。
然后制造商开始提供更多内置于手机中的非 SD 卡存储,而且通常没有 SD 卡插槽。但我相信他们仍然希望为用户提供更多的灵活性,让他们可以使用额外的内部存储空间,而不是像模拟 SD 卡一样使用 Android 给非 SD 卡存储提供的有限访问权限。
但是,当他们这样做时,他们不希望“内部”和模拟“外部”存储之间有硬固定的分区边界,因此它们位于同一分区上,并且制造商提供了一个文档提供程序,可以访问“内部”和模拟“外部”存储的各个目录。内部”存储,就好像它是开放访问“用户”存储,作为 SD 卡的替代品。
现在有些手机提供使用 SD 卡作为无缝扩展“内部存储”的方式,这让情况更加复杂。
此外,Google 在权限以及如何通过各种 Android 版本访问文件方面做了很多工作。
因此,Android Studio 模拟器仅真正提供基本的更原始的选项,即“有限内部”/“SD 卡”设置如何保证在所有手机上可用,从真正的旧手机到现代“基本”手机,再到现代高端手机电话。
您还注意到,Android Studio 模拟器没有设置“G Drive”文档提供程序,因为模拟器通常不会连接到 Gmail 帐户和 Goggle Drive。
但 SAF 的整体概念是,作为开发人员,所有不同存储配置选项的复杂性并不重要。您要求用户选择某个位置,然后您会返回一个可以以一致的方式使用的 URI,无论它是在基于设备的内部存储、模拟外部存储、SD 卡还是某个随机云提供商上。