【问题标题】:Android: absolute location of External sd-cardAndroid:外部 sd 卡的绝对位置
【发布时间】:2011-11-07 06:49:12
【问题描述】:

我有一个非常简单的问题,但到目前为止我无法找到这个问题的答案。 “有没有办法在Android中找到INTERNAL STORAGE DIRECTORYEXTERNAL STORAGE DIRECTORY(SDCARD)的绝对路径?”

请不要推荐使用Environment.getExternalStorageDirectory,因为它通常会返回内部存储的路径,或者Android操作系统默认选择任何存储介质..

有什么建议吗?

【问题讨论】:

  • Environment.getExternalStorageDirectory 被定义 以返回“外部存储”目录,但它不再一定是可移动卡。它永远不会返回“内部存储”目录(通常是 /data 分区)。对于如何确定系统上的可移动 sdcard 的路径可能没有一个 Android 范围的标准,该系统还具有焊接在“外部存储”分区中的路径,因为这似乎更像是供应商扩展而不是上游 android 功能。
  • 是的,我同意你的看法。我也认为没有办法确定可移动 sdcard 的路径。这应该已经实现,因为有时应用程序可能会为用户提供选择内部存储或外部存储的选项。在这种情况下,您要么为单个设备硬编码目录路径(考虑到当今可用的不同设备,这不是一个好主意),要么 Android 应该提供一个公共 API..
  • @Farhan 你找到解决方案了吗?我也在寻找同样的东西。您是否尝试过 /proc/mount 并取得了任何合理的成功?

标签: android sd-card absolute-path


【解决方案1】:

之前有人问过这个问题,请使用搜索。简而言之,“外部存储”更像是“共享存储”,它可能由实际的 SD 卡实现,也可能不实现。有些设备有一个额外的 SD 卡,不用作外部存储。如果这是您所要求的,目前没有用于访问其挂载位置的公共 API,并且它因设备而异。您可以检查/proc/mount 以查看当前已安装的内容并从那里开始。

【讨论】:

  • 我注意到它通常是/mnt/sdcard,但这是通用的吗?
  • /mnt/sdcard 通常是外部存储的路径,但我不认为它是通用的。额外的 SD 卡(例如在 Xoom 或 Iconia 上)安装在其他地方。我已经看到对“辅助外部存储”的引用,但 SDK 中没有针对它的 API。
  • 是的,在 Xoom、Galaxy Tab、华硕平板电脑、三星 Galaxy S2 等设备中。 /mnt/sdcard 通常指向内部存储;不是外部 SD 卡存储。
  • 感谢 Nikolay 的回答。我也发现当前没有公共 API 可用于访问 getExternalStorageDirectory() 返回内部共享存储路径的设备中可移动 sd 卡的安装位置.看来我必须尝试制作自己的图书馆:)
  • 尝试 /proc/mount 的想法,并寻找看起来像是外部存储卷的条目 - 相当大并且在 /mnt* 或(对于旧版)/sd* 形式的路径下
【解决方案2】:

此链接来自 Android 配置指南。我认为这是推荐的,不是必需的。

https://source.android.com/devices/tech/storage/config-example.html

所以,要获得 SDCARD,您可以这样做。

String storagePath = System.getenv("SECONDARY_STORAGE");

if (storagePath == null) {
    return null;
} else {
     String[] storagePathArray = storagePath.split(":");
     return storagePathArray[0];
}

EXTERNAL_STORAGE 似乎在我所有的东西上。

SECONDARY_STORAGE 是在我的 LG GTab 8.3 和我的 Samsung Tab 2&3 上定义的,但不是在我的 Galaxy S (2.3) 或我的 Dell Venue (4.3) 上定义的。在三星设备上,它似乎首先包含 SD 卡的多条路径,因此是分裂的。

【讨论】:

    【解决方案3】:

    你应该使用

    Environment.getExternalStorageDirectory().getAbsolutePath()
    

    【讨论】:

    • 请再次检查我的问题。我写了 Environment.getExternalStorageDirectory() 不一定返回真正的外部(sd卡)目录的绝对路径。
    【解决方案4】:

    在三星 Galaxy Note 10.1 2014 版 SM-P600(我会假设大多数其他相同年份的三星 Galaxy Note)上,“REAL”外部 SD 卡的完整路径是这样的:

    /storage/extSdCard/

    我使用终端找到了我的并做到了:

    cd /storage/extSdCard/

    然后在卡的根目录中,我使用“ls”命令列出文件,因此我可以验证其中存储的内容。我就是这样找到我的。希望它可以帮助别人。

    【讨论】:

      【解决方案5】:

      如果有两个存储选项,我认为 /storage/sdcard0/ 用于内部 sdcard 和 /storage/sdcard1/ 用于外部 sd 卡。 如果您正在检查文件是否存在于任何 sdcard 中,您应该检查所有可能的路径。

       String path;    
       if(new File("/storage/sdcard/yourpath").exist())
           {
              path="/storage/sdcard/yourpath";
           }
       else if(new File("/storage/sdcard0/yourpath").exists())
           {
              path="/storage/sdcard0/yourpath";
           }
       else if(new File("/storage/sdcard1/yourpath").exists())
           {
              path="/storage/sdcard1/yourpath";
           }
      

      【讨论】:

        【解决方案6】:

        字符串路径=ExternalStorageDirectoryPath + "/foldername/";

        【讨论】:

          猜你喜欢
          • 2017-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多