2013-12-23 34 views
2

一般問題:當位置變化時,Environment.getExternalStorageDirectory()的定義行爲是什麼?

人們都存儲在「外部存儲目錄」

我在做什麼數據的應用程序更新後抱怨數據丟失:

我使用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不存在,我創建目錄。這與新安裝時發生的行爲相同。

問:

當OS的更新會發生什麼情況。是否有保證舊位置將作爲新位置的符號鏈接存在? 應用程序更新後,人們如何抱怨數據丟失?

回答

1

我使用Environment.getExternalStorageDirectory()來獲取外部存儲目錄以將文件存儲在內部存儲器之外,以便有機會將這些文件存儲在SD卡上。

Android上的外部存儲與「SD卡」沒有任何必然關係。特別是在現代設備上,Environment.getExternalStorageDirectory()不太可能成爲可移動介質。

在我的應用程序

我得到我的目錄下面的代碼:

請考慮換用其它任何東西,所以你不要弄亂用戶的外部存儲的根與隨機目錄。改爲使用getExternalFilesDir()getExternalCacheDir()(均在Context)或Environment.getExternalStoragePublicDir()

根據Android版本,這將是一個不同的目錄。例如/ mnt/sdcard/dir_name,/ storage/sdcard0/dir_name

只要您不試圖在某處(例如,在數據庫中)保存這些絕對路徑,這不會成爲問題。

是否有保證舊位置將作爲新位置的符號鏈接存在?

不。這是文檔建議您不要將絕對路徑保存到外部存儲位置的原因。

+0

thx。我知道無法保證在SD卡上存儲。卸載時'getExternalFileDir'不是持久的。 'cachDir'也不合適。我沒有在任何地方存儲abs路徑(請參閱問題)。問題是:在更新'getExternalStorageDirectory()'的位置的操作系統更新之後,我正在使用的代碼是否仍會找到我的文件? – philipp

相關問題