无法访问Android的SD卡

时间:2017-08-08 13:18:36

标签: android android-sdcard sd-card

**编辑

我可以通过usb端口通过适配器访问它,而不是SD卡,因此最好将其视为USB驱动器。

经过大量的努力和研究,我能够找到一种方法来到达我正在使用的SD卡(USB驱动器)的路径。通常,路径为/ mnt / media_rw / XXXX-XXXX(其中XXXX-XXXX是SD卡(USB驱动器)的代码)。

问题是,我正在尝试阅读那里的一些文件,但是当我打电话时

new File("/mnt/media_rw/XXXX-XXXX").listFiles();

我得到的返回一个空数组。我很确定其中有文件,因为我有一部可以使用的手机,但在那部手机中,它的路径不是" mnt / media_rw / XXXX-XXXX"。使用与该手机相同的路径不起作用。

我已经通过这篇文章How can I get the list of mounted external storage of android device

达到了这条道路

我有2个权限:READ_EXTERNAL_STORAGE和READ_PHONE_STATE。我不得不在清单中以编程方式添加机器人(不知道为什么只有在两者中添加它们时才有效,但不能分开)。

**已添加

public static String findFileInStorages(String filename) throws Exception {
    List<StorageUtils.StorageInfo> storageList = StorageUtils.getStorageList(); // Here i get 2 paths: 1) /storage/emulated/0; 2) /mnt/media_rw/XXXX-XXXX
    for(int i = 0; i < storageList.size(); i++) {
        String pathToFile = findFileWithBasePath(new File(storageList.get(i).path, filename);
        if (pathToFile != null) return pathToFile;
    }
    throw new Exception("Couldn't find file");
}

public static String findFileWithBasePath(File file, String fileName) throws Exception {
    File listFile[] = file.listFiles();
    String outputFile = null;
    if (listFile != null && listFile.length > 0) {
        for (int i = 0; i < listFile.length; i++) {
            if (listFile[i].isDirectory()) {
                outputFile = findFileWithBasePath(listFile[i], fileName);
            } else {
                if(listFile[i].getName().contains(fileName)) {
                    return listFile[i].getAbsolutePath();
                }
            }
            if (outputFile != null) return outputFile;
        }
    }
    return null;
}

&#34; getStorageList()&#34;方法和&#34; StorageUtils&#34;和&#34; StorangeInfo&#34;课程在上面的链接中。我没有改变其中的代码。

如果有什么我可以添加,请问它。

由于

1 个答案:

答案 0 :(得分:1)

有一种上下文方法可以检索所有SD卡的路径

context.getExternalFilesDirs(null)

返回应用程序可以放置其拥有的永久文件的所有共享/外部存储设备上特定于应用程序的目录的绝对路径。