无法访问安卓SD卡

3

**编辑

我是通过适配器进入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”。使用与该手机相同的路径无法工作。

我通过这篇帖子找到了这条路径:如何获取Android设备上已安装的外部存储列表

我有两个权限: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;
}

在上面的链接中,有“getStorageList()”方法和“StorageUtils”和“StorangeInfo”类。我没有改变其中的任何代码。
如果有需要添加的内容,请告诉我。
谢谢。

发布你的代码...... - Vishal Vaishnav
在Android 4.4+上,您无法访问可移动媒体上的任意位置的文件系统。 - CommonsWare
你认为这会对你有所帮助吗? https://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String) - ben_joseph
@CommonsWare,我该如何访问这些位置的文件系统?我正在寻找允许我这样做的Android权限。 - Silkking
“我如何才能访问这些位置的文件系统?” -- 获取设备的root权限。否则,你无法访问。或者,停止使用文件系统,改用存储访问框架(Storage Access Framework)。 - CommonsWare
1个回答

1

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

context.getExternalFilesDirs(null)

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

我认为我尝试过这个但没有成功。问题是我想读取的文件不是来自应用程序,而是在外部SD卡中。因此,我尝试在此处显示的文件夹或其父文件夹中查找该文件。 - Silkking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接