无法访问Android的SD卡

问题描述:

**编辑无法访问Android的SD卡

不是一个SD卡,我通过适配器访问它通过USB接口,所以它可能是更好的把它看作一个USB驱动器。

经过大量的努力和研究后,我找到了一种方法来达到我正在使用的SD卡(USB驱动器)的路径。通常,路径是/ mnt/media_rw/XXXX-XXXX(其中XXXX-XXXX是sdcard(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。我必须将它们添加到清单中并以编程方式添加它们(不知道为什么只有在两者中都添加它们时才起作用,但不会分开)。

** ADDED

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” 类在上面的链接。我没有改变它的代码。

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

由于

+0

张贴代码..... –

+0

您无法通过[可移动介质]上的任意位置访问文件系统(https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage .html)在Android 4.4+上。 – CommonsWare

+0

你认为这会对你有帮助吗? https://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String) – notsopopularguy

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

context.getExternalFilesDirs(null) 

返回到应用程序特定的目录绝对路径上的所有共享/外部存储设备,其中应用程序可以将持续它拥有的文件。

+0

我想我试过这个不成功的。事情是我想阅读的文件不是从应用程序,但它是在外部的SD卡。 有了这个我试图寻找文件夹中的文件出现在这里或它的父母 –