2016-07-01 150 views
0

我想製作一個文件瀏覽器應用程序。所以我想開始展示這樣的東西。Android手機SD卡路徑

enter image description here

但我不能達到我的SD卡的路徑。我用這個方法

String path = Environment.getExternalStorageDirectory(); 

在文檔here它說:

注意:不要用這個詞混淆「外部」在這裏。這個目錄可以更好地被認爲是媒體/共享存儲。它是一個文件系統,可以容納大量的數據並在所有應用程序之間共享(不強制執行權限)。傳統上這是一張SD卡,但它也可以實現爲與受保護的內部存儲器不同的設備中的內置存儲器,並且可以作爲文件系統安裝在計算機上。

問題是我可以達到設備存儲,但我無法達到我的SD卡的路徑。有誰知道如何獲得該路徑?

+1

您沒有對[可移動存儲]的任意文件系統訪問權限(https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)。 – CommonsWare

+0

您可以使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)讀取所有類型的目錄; –

回答

3

\t // Access the built-in SD card 
 
\t private String getInnerSDCardPath() { 
 
\t \t return Environment.getExternalStorageDirectory().getPath(); 
 
\t } 
 

 
\t // Access to external SD card 
 
\t private List<String> getExtSDCardPath() { 
 
\t \t List<String> pathList = new ArrayList<String>(); 
 
\t \t try { 
 
\t \t \t Runtime runtime = Runtime.getRuntime(); 
 
\t \t \t Process proc = runtime.exec("mount"); 
 
\t \t \t BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
 
\t \t \t String line; 
 
\t \t \t while ((line = bufferedReader.readLine()) != null) { 
 
\t \t \t \t if (line.contains("extSdCard")) { 
 
\t \t \t \t \t String[] arr = line.split(" "); 
 
\t \t \t \t \t String path = arr[1]; 
 
\t \t \t \t \t File file = new File(path); 
 
\t \t \t \t \t if (file.isDirectory()) { 
 
\t \t \t \t \t \t pathList.add(path); 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t \t bufferedReader.close(); 
 
\t \t } catch (Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 
\t \t return pathList; 
 
\t }

我希望它可以幫助你。

+0

非常感謝。這個對我有用。你反應很快。 – gunescelil

+0

我意識到在模擬器中它不起作用。但在一個真正的手機它的作品。 – gunescelil