【问题标题】:Can't get sdcard real path on Android 6.0在 Android 6.0 上无法获取 sdcard 真实路径
【发布时间】:2017-02-02 20:17:56
【问题描述】:

我的安卓手机是索尼Z3,版本是安卓6.0.1,我用的时候 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)获取SDCard DCIM路径,返回路径为/storage/emulated/0/DCIM

但我的 sdcard 真实路径是 /storage/3FC5-160A/DCIM。有人知道如何在 Android 6 上获得正确的 sdcard 路径吗?谢谢。

另外,我在清单中添加了外部存储读写权限

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

【问题讨论】:

    标签: android android-sdcard


    【解决方案1】:

    我必须专门为 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;
             }
    }
    

    【讨论】:

    • 谢谢,我用的方法和你一样,context.getExternalMediaDirs()也可以获取到真正的sdcard路径。
    【解决方案2】:

    经过大量研究,我找到了解决方案。下面的代码为您提供“SD 卡/Android/数据/您的应用位置”中的路径,然后您可以做任何您想做的事情。

    getApplicationContext().getExternalCacheDirs()[1]
    

    【讨论】:

      【解决方案3】:

      使用getExternalStorageDirectory() 而不是getExternalStoragePublicDirectory(),如下所示

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

      或先检查路径

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

      【讨论】:

      • 感谢您的回复,但它仍然返回模拟路径。
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-19
        • 2013-07-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        相关资源
        最近更新 更多