一般问题:
在应用程序更新存储在“外部存储目录”
上的数据后,人们抱怨数据丢失我在做什么:
我正在使用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
不存在,我创建目录。这与新安装时发生的行为相同。
问题:
更新操作系统后会发生什么。是否可以保证旧位置将作为新位置的符号链接存在? 应用更新后,人们如何抱怨数据丢失?
答案 0 :(得分:1)
我正在使用Environment.getExternalStorageDirectory()来获取外部存储目录以将文件存储在内部存储器之外,以便能够将这些文件存储在SD卡上。
Android上的外部存储与“SD卡”没有任何关系。特别是,在现代设备上,Environment.getExternalStorageDirectory()
极不可能是可移动媒体。
在我的应用程序中,我使用以下代码获取目录:
请考虑切换到其他任何内容,这样就不会使用随机目录混淆用户外部存储的根目录。请改用getExternalFilesDir()
,getExternalCacheDir()
(Context
)或Environment.getExternalStoragePublicDir()
。
根据Android版本,这将是一个不同的目录。例如/ mnt / sdcard / dir_name,/ storage / sdcard0 / dir_name
这不会有问题,只要您不想在某处(例如,在数据库中)保存这些绝对路径。
是否可以保证旧位置将作为新位置的符号链接存在?
没有。这就是文档建议您不要将绝对路径保存到外部存储上的位置的原因。