我读了很多关于KITKAT和防止写入辅助外部SD卡的内容。 这似乎是谷歌的一项新政策。我还阅读了关于在/ externalsdcard / Android / data /下存储应用程序数据的信息。
现在我的问题,因为我无法复制或测试: 如果应用程序不允许直接写入数据 < secundary external sdcard>,然后可以将应用程序的数据存储在< secundary external sdcard> / Android / data /<应用包名称> ?
如果可能的话。有人可以共享代码示例吗?
答案 0 :(得分:3)
永远不要假设可移动的辅助存储空间大于内部主存储器。在大多数现代设备上,内部存储空间最高可达64 GB,但SD卡可以小到1 MB(如果用户插入小型旧卡)。
没有办法区分哪一个是"外部"使用当前的API。
所以正确的方法是使用Context.getExternalFilesDirs()返回所有外部存储,您可以在没有任何权限的情况下存储特定于应用程序的文件。
使用StatF查找可用的最大存储空间,并将数据写入其中。
final File[] dirs = context.getExternalFilesDirs(null); //null means default type
//find a dir that has most of the space and save using StatFs
正如文件所说,
返回应用程序可以放置其拥有的永久文件的所有外部存储设备上特定于应用程序的目录的绝对路径。这些文件是应用程序的内部文件,通常不会被用户视为媒体。
这就像getFilesDir()一样,这些文件将在卸载应用程序时被删除,但是有一些重要的区别:
外部文件并非始终可用:如果用户将外部存储装入计算机或将其删除,它们将消失。 这些文件没有强制执行安全性。
此处返回的外部存储设备被视为设备的永久部分,包括模拟外部存储和物理媒体插槽,例如电池盒中的SD卡。返回的路径不包括瞬态设备,例如USB闪存驱动器。
应用程序可以在任何或所有返回的设备上存储数据。例如,应用程序可以选择在设备上存储具有最大可用空间的大文件,如StatF所测量。
读取或写入返回的路径不需要任何权限;他们总是可以访问调用应用程序。在辅助外部存储设备上的这些路径之外的写访问权限不可用。
返回的第一个路径与getExternalFilesDir(String)相同。如果存储设备不可用,则返回的路径可能为空。