2016-07-01 156 views
0

我想制作一个文件浏览器应用程序。所以我想开始展示这样的东西。Android手机SD卡路径

enter image description here

但我不能达到我的SD卡的路径。我用这个方法

String path = Environment.getExternalStorageDirectory(); 

在文档here它说:

注意:不要用这个词混淆“外部”在这里。这个目录可以更好地被认为是媒体/共享存储。它是一个文件系统,可以容纳大量的数据并在所有应用程序之间共享(不强制执行权限)。传统上这是一张SD卡,但它也可以实现为与受保护的内部存储器不同的设备中的内置存储器,并且可以作为文件系统安装在计算机上。

问题是我可以达到设备存储,但我无法达到我的SD卡的路径。有谁知道如何获得该路径?

+1

您没有对[可移动存储]的任意文件系统访问权限(https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html)。 – CommonsWare

+0

您可以使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)读取所有类型的目录; –

回答

3

\t // Access the built-in SD card 
 
\t private String getInnerSDCardPath() { 
 
\t \t return Environment.getExternalStorageDirectory().getPath(); 
 
\t } 
 

 
\t // Access to external SD card 
 
\t private List<String> getExtSDCardPath() { 
 
\t \t List<String> pathList = new ArrayList<String>(); 
 
\t \t try { 
 
\t \t \t Runtime runtime = Runtime.getRuntime(); 
 
\t \t \t Process proc = runtime.exec("mount"); 
 
\t \t \t BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
 
\t \t \t String line; 
 
\t \t \t while ((line = bufferedReader.readLine()) != null) { 
 
\t \t \t \t if (line.contains("extSdCard")) { 
 
\t \t \t \t \t String[] arr = line.split(" "); 
 
\t \t \t \t \t String path = arr[1]; 
 
\t \t \t \t \t File file = new File(path); 
 
\t \t \t \t \t if (file.isDirectory()) { 
 
\t \t \t \t \t \t pathList.add(path); 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t \t bufferedReader.close(); 
 
\t \t } catch (Exception e) { 
 
\t \t \t e.printStackTrace(); 
 
\t \t } 
 
\t \t return pathList; 
 
\t }

我希望它可以帮助你。

+0

非常感谢。这个对我有用。你反应很快。 – gunescelil

+0

我意识到在模拟器中它不起作用。但在一个真正的手机它的作品。 – gunescelil