Can';无法在Android 6.0上获取SD卡的真实路径
我的安卓手机是索尼Z3,当我使用安卓6.0.1时,它的版本是安卓6.0.1Can';无法在Android 6.0上获取SD卡的真实路径,android,android-sdcard,Android,Android Sdcard,我的安卓手机是索尼Z3,当我使用安卓6.0.1时,它的版本是安卓6.0.1 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u DCIM)获取SD卡DCIM路径,返回路径为/storage/emulated/0/DCIM 但我的SD卡实际路径是/storage/3FC5-160A/DCIM。有人知道如何在Android 6上获得正确的SD卡路径吗?谢谢 另外,我在清单中添加了外部存储读写权限 <uses
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u DCIM)
获取SD卡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" />
使用
getExternalStorageDirectory()
而不是像下面这样使用getExternalStoragePublicDirectory()
Environment.getExternalStorageDirectory() + "/" + Environment.DIRECTORY_DCIM + "/";
或者先检查路径
final String path = android.os.Environment.DIRECTORY_DCIM;
我正在使用access存储框架。我通过处理uri字符串得到它,得到“3FC5-160A”部分,然后将其组合到SD卡路径 你可以在这里查看我的详细答案
我必须专门为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;
}
}
经过大量研究,我找到了一个解决办法。下面的代码为您提供了“SD卡/Android/data/your app location”中的路径,然后您可以做任何您想做的事情
getApplicationContext().getExternalCacheDirs()[1]
感谢您的回复,但它仍然返回模拟路径。谢谢,我使用了与您相同的方法,context.getExternalMediaDirs()也可以获得真正的SD卡路径。