首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >制造商可移动存储(外部) sdcard路径

制造商可移动存储(外部) sdcard路径
EN

Stack Overflow用户
提问于 2012-12-20 16:58:22
回答 4查看 22.7K关注 0票数 32

我一直在谷歌搜索,但很难找到制造商/型号使用哪条路径用于sdcard/外部存储。

  • 我说的不是内部存储路径,它可以通过以下方式找到:

Environment.getExternalStorageDirectory()

我知道getExternalStorageDirectory()有时会指向某些设备上的外部sdcard。

下面是我为外部路径找到的一些常见路径(不确定哪个制造商使用哪条路径):

代码语言:javascript
复制
/emmc
/mnt/sdcard/external_sd
/mnt/external_sd
/sdcard/sd
/mnt/sdcard/bpemmctest
/mnt/sdcard/_ExternalSD
/mnt/sdcard-ext
/mnt/Removable/MicroSD
/Removable/MicroSD
/mnt/external1
/mnt/extSdCard
/mnt/extsd
/mnt/usb_storage  <-- usb flash mount
/mnt/extSdCard  <-- usb flash mount
/mnt/UsbDriveA  <-- usb flash mount
/mnt/UsbDriveB  <-- usb flash mount

这就是我在谷歌上发现的。

我需要扫描整个内部+外部存储+ USB闪存驱动器寻找一个特定的文件。如果我错过了任何路径,请添加到上面的列表。如果有人知道每个制造商使用的路径,请与我们分享。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-20 23:25:24

好消息!在KitKat中,现在有一个用于与这些辅助共享存储设备交互的公共API。

新的Context.getExternalFilesDirs()Context.getExternalCacheDirs()方法可以返回多个路径,包括主设备和辅助设备。然后可以对它们进行迭代,并检查Environment.getStorageState()File.getFreeSpace(),以确定存储文件的最佳位置。这些方法在support-v4库的ContextCompat上也是可用的。

还请注意,如果您只对使用Context返回的目录感兴趣,则不再需要READ_WRITE_EXTERNAL_STORAGE权限。接下来,您将始终可以在不需要额外权限的情况下对这些目录进行读/写访问。

应用程序还可以继续在老设备上工作,在使用结束时,可以像这样请求它们的许可:

代码语言:javascript
复制
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18" />
票数 13
EN

Stack Overflow用户

发布于 2014-01-23 15:23:03

我还从你的列表开始(很抱歉找不到原始的来源),并继续添加一些从用户反馈中收集的路径。上面的清单是重复的。

代码语言:javascript
复制
    /storage/sdcard1 //!< Motorola Xoom
    /storage/extsdcard  //!< Samsung SGS3
    /storage/sdcard0/external_sdcard  // user request
    /mnt/extsdcard
    /mnt/sdcard/external_sd  //!< Samsung galaxy family
    /mnt/external_sd
    /mnt/media_rw/sdcard1   //!< 4.4.2 on CyanogenMod S3
    /removable/microsd              //!< Asus transformer prime
    /mnt/emmc
    /storage/external_SD            //!< LG
    /storage/ext_sd                 //!< HTC One Max
    /storage/removable/sdcard1      //!< Sony Xperia Z1
    /data/sdext
    /data/sdext2
    /data/sdext3
    /data/sdext4
    /sdcard1                       //Sony Xperia Z
    /sdcard2                       //HTC One M8s
    /storage/microsd               //ASUS ZenFone 2

对于您想要实现的目标(扫描所有可能的路径以找到特定的文件),我认为这样做是不可能的(使用已知路径的列表)。同一设备上的一些路径甚至在android升级之间发生了变化。

票数 11
EN

Stack Overflow用户

发布于 2015-05-15 14:09:47

基于所提供的路径,我编写了一个方法,该方法定位外部存储路径(忽略大小写)并将其作为字符串返回。

注意:我在我的方法中使用了StreamSupport库,因此为了使它工作,您需要下载jar文件并将其添加到项目中的libs文件夹中,仅此而已。

代码语言:javascript
复制
  public static String getExternalSdPath(Context context) {
    List<String> listOfFoldersToSearch = Arrays.asList("/storage/", "/mnt/", "/removable/", "/data/");
    List<String> listOf2DepthFolders = Arrays.asList("sdcard0", "media_rw", "removable");
    List<String> listOfExtFolders = Arrays.asList("sdcard1", "extsdcard", "external_sd", "microsd", "emmc", "ext_sd", "sdext",
            "sdext1", "sdext2", "sdext3", "sdext4");
    final String[] thePath = {""};
    Optional<File> optional = StreamSupport.stream(listOfFoldersToSearch)
            .filter(s -> {
                File folder = new File(s);
                return folder.exists() && folder.isDirectory();
            }) //I got the ones that exist and are directories
            .flatMap(s -> {
                try {
                    List<File> files = Arrays.asList(new File(s).listFiles());
                    return StreamSupport.stream(files);
                } catch (NullPointerException e) {
                    return StreamSupport.stream(Collections.emptyList());
                }
            }) //I got all sub-dirs of the main folders
            .flatMap(file1 -> {
                if (listOf2DepthFolders.contains(file1.getName().toLowerCase())) {
                    try {
                        List<File> files = Arrays.asList(file1.listFiles());
                        return StreamSupport.stream(files);
                    } catch (NullPointerException e) {
                        return StreamSupport.stream(Collections.singletonList(file1));
                    }
                } else
                    return StreamSupport.stream(Collections.singletonList(file1));
            }) //Here I got all the 2 depth and 3 depth folders
            .filter(o -> listOfExtFolders.contains(o.getName().toLowerCase()))
            .findFirst();

    optional.ifPresent(file -> thePath[0] = file.getAbsolutePath());

    Log.i("Path", thePath[0]);

    return thePath[0];
}

如果找不到Sd卡路径,此方法将返回空字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13976982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档