当位置发生变化时,Environment.getExternalStorageDirectory()的定义行为是什么?

时间:2013-12-23 12:52:29

标签: android file io

一般问题:

在应用程序更新存储在“外部存储目录”

上的数据后,人们抱怨数据丢失

我在做什么:

我正在使用Environment.getExternalStorageDirectory()来获取外部存储目录以将文件存储在内部存储器之外,以便能够将这些文件存储在SD卡上。

我遇到的问题是每次应用更新后,极少数用户抱怨应用程序中存储的文件不再可见。

此方法的官方文档中有一段说:

  

此路径可能会在平台版本之间发生变化,因此应用程序应该   只坚持相对路径。

在我的应用程序中,我使用以下代码获取目录:

File root = Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/" + DIRECTORY_NAME + "/");

根据Android版本,这将是不同的dir。例如/mnt/sdcard/dir_name/storage/sdcard0/dir_name

如果dir不存在,我创建目录。这与新安装时发生的行为相同。

问题:

更新操作系统后会发生什么。是否可以保证旧位置将作为新位置的符号链接存在? 应用更新后,人们如何抱怨数据丢失?

1 个答案:

答案 0 :(得分:1)

  

我正在使用Environment.getExternalStorageDirectory()来获取外部存储目录以将文件存储在内部存储器之外,以便能够将这些文件存储在SD卡上。

Android上的外部存储与“SD卡”没有任何关系。特别是,在现代设备上,Environment.getExternalStorageDirectory()极不可能是可移动媒体。

  

在我的应用程序中,我使用以下代码获取目录:

请考虑切换到其他任何内容,这样就不会使用随机目录混淆用户外部存储的根目录。请改用getExternalFilesDir()getExternalCacheDir()Context)或Environment.getExternalStoragePublicDir()

  

根据Android版本,这将是一个不同的目录。例如/ mnt / sdcard / dir_name,/ storage / sdcard0 / dir_name

这不会有问题,只要您不想在某处(例如,在数据库中)保存这些绝对路径。

  

是否可以保证旧位置将作为新位置的符号链接存在?

没有。这就是文档建议您不要将绝对路径保存到外部存储上的位置的原因。