2016-07-01 8 views
0

私はファイルブラウザアプリケーションを作ろうとしています。だから私はこのようなものを表示することから始めたいと思う。Android携帯電話のSdカードパス

enter image description here

しかし、私は私のSDカードのパスに到達することはできません。

注:私はそれを言うのドキュメントhereでは、この方法

String path = Environment.getExternalStorageDirectory(); 

を使用し、ここで「外部」という言葉に惑わされてはいけません。このディレクトリはメディア/共有ストレージと考えることができます。それは、比較的大量のデータを保持することができ、すべてのアプリケーションで共有される(許可を強制しない)ファイルシステムです。従来、これは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