**编辑
我是通过适配器进入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”类。我没有改变其中的任何代码。
如果有需要添加的内容,请告诉我。
谢谢。