2016-07-13 49 views
1

我的Android手機SD卡獲取真實路徑是索尼Z3和版本的是Android 6.0.1,當我使用 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)獲得SD卡DCIM路徑,返回路徑爲/storage/emulated/0/DCIM不能在Android 6.0

但我的SD卡真正的路徑是/storage/3FC5-160A/DCIM。任何人都知道如何在Android 6上獲得正確的SD卡路徑?謝謝。

另外,我補充讀取外部存儲和寫入權限清單中

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

回答

0

使用getExternalStorageDirectory()代替getExternalStoragePublicDirectory()像下面

Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_DCIM + "/"; 

或支票路徑第一

final String path = android.os.Environment.DIRECTORY_DCIM; 
+0

感謝您的答覆,但它仍返回模擬路徑。 – harvey

0

我正在使用訪問存儲框架。我通過處理uri字符串得到它並獲得「3FC5-160A」部分,然後將其組合到SD卡路徑。

您可以檢查我在這裏詳細的解答

https://stackoverflow.com/a/38648200/6530106

2

我必須爲M.爲此專門獲取所有的迪爾斯與context.getExternalCacheDirs()然後檢查它是否是可移動的

// For Marshmallow, use getExternalCacheDirs() instead of System.getenv("SECONDARY_STORAGE") 
// to determine if there are mounted SD cards 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    File[] externalCacheDirs = context.getExternalCacheDirs(); 
    for (File file : externalCacheDirs) { 
     if (Environment.isExternalStorageRemovable(file)) { 
       // Path is in format /storage.../Android.... 
       // Get everything before /Android 
       externalSdCardPath = file.getPath().split("/Android")[0]; 
       break; 
     } 
} 
+0

謝謝你,我用你,context.getExternalMediaDirs()同樣的方法也可以得到真正的SD卡路徑。 – harvey

+0

不要忘記接受它作爲答案:) – ono

1

很多後我發現了一個解決方案。在下面的代碼爲您提供了「SD卡/安卓/數據/你的應用程序位置」那麼你可以做任何你想做的路徑。

getApplicationContext().getExternalCacheDirs()[1] 
相關問題