**编辑
我可以通过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;课程在上面的链接中。我没有改变其中的代码。
如果有什么我可以添加,请问它。
由于
答案 0 :(得分:1)
有一种上下文方法可以检索所有SD卡的路径
context.getExternalFilesDirs(null)
返回应用程序可以放置其拥有的永久文件的所有共享/外部存储设备上特定于应用程序的目录的绝对路径。