无法在Android 6.0上获得SD卡真实路径

时间:2016-07-13 09:15:29

标签: android android-sdcard

我的Android手机是Sony Z3,当我使用时,版本是Android 6.0.1 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)获取SDCard DCIM路径,返回路径为/storage/emulated/0/DCIM

但是我的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" />

4 个答案:

答案 0 :(得分: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;
         }
}

答案 1 :(得分:1)

经过大量研究后,我找到了解决方案。下面的代码为您提供&#34; SD卡/ Android /数据/您的应用位置&#34; 中的路径,然后您就可以随心所欲。

getApplicationContext().getExternalCacheDirs()[1]

答案 2 :(得分:0)

使用getExternalStorageDirectory()代替getExternalStoragePublicDirectory(),如下所示

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

或首先检查路径

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

答案 3 :(得分:0)

我正在使用访问存储框架。我通过处理uri字符串得到它并得到“3FC5-160A”部分然后将它组合到sdcard路径。

你可以在这里查看我的详细答案

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