簡體   English   中英

Android外部存儲與SD卡

[英]Android External Storage vs. SD Card

閱讀有關存儲文件的Android文檔后,我看到外部存儲可以同時包含可移動sd卡和設備內部的存儲,即不可移動。 選擇將文件保存到外部存儲時,是否可以區分可移動存儲和不可移動存儲?

我認為您無法可靠地區分內部和外部(SD)存儲。

乍一看,您似乎可以使用Environment.isExternalStorageRemovable()但這並不可靠,因為您的“主要外部”存儲設備很可能是設備的內部存儲器,而不是SD卡。

Environment.getExternalStorageDirectory()的文檔指出:

注意:請勿在此處與“外部”一詞混淆。 最好將此目錄視為媒體/共享存儲。 它是一個文件系統,可以保存相對大量的數據,並且可以在所有應用程序之間共享(不強制執行權限)。 傳統上,這是SD卡,但也可以將其實現為設備中的內置存儲,該設備不同於受保護的內部存儲,並且可以作為文件系統安裝在計算機上。

例如,我的LG G4安裝了外部SD卡,可以通過adb( external_SD )看到它:

$ adb shell ls -la /storage/
drwx------ root     root              2015-02-28 01:10 USBstorage1
drwx------ root     root              2015-02-28 01:10 USBstorage2
drwx------ root     root              2015-02-28 01:10 USBstorage3
drwx------ root     root              2015-02-28 01:10 USBstorage4
drwx------ root     root              2015-02-28 01:10 USBstorage5
drwx------ root     root              2015-02-28 01:10 USBstorage6
dr-xr-xr-x root     root              2015-02-28 01:10 emulated
drwxrwx--x root     sdcard_r          2015-07-31 08:19 external_SD
lrwxrwxrwx root     root              2015-02-28 01:10 sdcard0 -> /storage/emulated/legacy

但是,用於外部存儲的各種API返回的值證明設備正在使用內部存儲器作為其“主要外部”存儲:

  • Environment.getExternalStorageState:已安裝
  • Environment.isExternalStorageEmulated: true
  • Environment.isExternalStorageRemovable:
  • Context.getExternalCacheDir:/ storage / 模擬 /0/Android/data/com.codeblast.storagetype/cache
  • Context.getExternalFilesDir:/ storage / 模擬 /0/Android/data/com.codeblast.storagetype/files

在沒有外部SD卡的仿真器上運行代碼將返回完全相同的結果。

因此,您不能假定/mnt/sdcard表示物理SD卡。

您可能需要重新考慮實際要完成的工作,而不是嘗試檢測存儲類型。 :-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM