2011-08-31 91 views
6

我有一個非常簡單的問題,但到目前爲止,我無法找到這個問題的答案。 「有什麼方法可以在Android中找到INTERNAL STORAGE DIRECTORYEXTERNAL STORAGE DIRECTORY(SDCARD)的絕對路徑?」Android:絕對位置的外部SD卡

請不建議使用Environment.getExternalStorageDirectory,因爲它通常會返回內部存儲或任何存儲介質選擇爲的是Android操作系統的默認路徑..

任何建議嗎?

+1

Environment.getExternalStorageDirectory is_defined_返回「外部存儲」目錄,但不再是必需的可移動卡。它永遠不會返回「內部存儲」目錄(通常是/ data分區)。對於如何確定系統中可移除SD卡的路徑,可能沒有一個Android範圍的標準,該系統也具有焊接在「外部存儲」分區中的系統,因爲這似乎更像是上游android功能的供應商擴展。 –

+1

是的,我同意你的意見。我也認爲沒有辦法確定一個可移動的SD卡的路徑。這應該已經實現,因爲有時應用程序可能會給用戶選擇內部存儲或外部存儲的選項。在這種情況下,無論是爲個別設備硬編碼目錄路徑(考慮到當今不同的設備,這不是一個好主意),還是Android應該提供一個公共API .. – Farhan

+0

@Farhan您是否設法找到任何解決方案?我正在尋找相同的。你有沒有嘗試/ proc/mount以及任何合理的成功? – Ahmed

回答

5

以前在SO上有過這個問題,請使用搜索。簡而言之,「外部存儲」更像是「共享存儲」,它可能會或可能不會被實際的SD卡所實現。某些設備具有附加的SD卡,不能用作外部存儲器。如果這是您要求的,那麼目前沒有用於訪問其安裝位置的公共API,並且它在不同設備之間有所不同。您可以檢查/proc/mount以查看當前安裝的內容,然後從此處開始。

+0

我已經注意到它通常是'/ mnt/sdcard',但是它是通用的嗎? –

+0

'/ mnt/sdcard'通常是外部存儲的路徑,但我不認爲它是通用的。額外的SD卡(例如在Xoom或Iconia上)被安裝在其他地方。我已經看到了對「輔助外部存儲」的引用,但在SDK中沒有它的API。 –

+0

是的,在Xoom,Galaxy Tab,華碩平板電腦,三星Galaxy S2等設備中。/mnt/sdcard通常指向內部存儲;而不是外部的SD卡存儲。 – Farhan

1

您應該使用

Environment.getExternalStorageDirectory().getAbsolutePath() 
+1

請再次檢查我的問題。我寫道Environment.getExternalStorageDirectory()不一定會返回真實外部(SD卡)目錄的絕對路徑。 – Farhan

0

我覺得/存儲/ sdcard0用於/內部SD卡和/存儲/ sdcard1 /用於外置SD卡,如果有兩個存儲選項存在。 如果你正在檢查一個文件是否存在於任何一個SD卡中,你應該檢查所有可能的路徑。

String path;  
if(new File("/storage/sdcard/yourpath").exist()) 
    { 
     path="/storage/sdcard/yourpath"; 
    } 
else if(new File("/storage/sdcard0/yourpath").exists()) 
    { 
     path="/storage/sdcard0/yourpath"; 
    } 
else if(new File("/storage/sdcard1/yourpath").exists()) 
    { 
     path="/storage/sdcard1/yourpath"; 
    } 
0

String path = ExternalStorageDirectoryPath +「/ foldername /」;

2

此鏈接來自Android配置指南。我認爲這是推薦,並不是必需的。

https://source.android.com/devices/tech/storage/config-example.html

因此,得到的SD卡,你可以做。

String storagePath = System.getenv("SECONDARY_STORAGE"); 

if (storagePath == null) { 
    return null; 
} else { 
    String[] storagePathArray = storagePath.split(":"); 
    return storagePathArray[0]; 
} 

EXTERNAL_STORAGE似乎是我自己的一切。

SECONDARY_STORAGE在我的LG GTab 8.3和我的三星標籤2 & 3上定義,但不在我的Galaxy S(2.3)或我的Dell Venue(4.3)上。在三星設備上,它似乎包含SD卡的多個路徑,因此分割。

0

在三星Galaxy Note 10.1 2014版SM-P600(我將承擔同樣復古的大多數其他三星Galaxy筆記),的完整路徑「真正的」外部SD卡,是這樣的:

/存儲/ extSdCard/

我發現使用終端和沒有地雷:

坎德拉/存儲/ extSdCard/

然後一旦在卡的根,我使用的「ls」命令列出的文件,所以我可以驗證存儲在其上的內容。多數民衆贊成我的發現我的。希望它可以幫助別人。