2016-11-05 7 views
0

Android APIレベル11でSDカードディレクトリを取得するにはどうすればよいですか?このコードEnvironment.getExternalStorageDirectory()=内部ディレクトリ

Environment.getExternalStorageDirectory(); 

私は電話機のディレクトリ(内部ディレクトリ)を返します。このコードは正常に動作する一部の携帯電話では

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

(例えば、ZTEブレードHNとフィリップス)、E.T.:私は唯一の外部ストレージ用AndroidManifest.xmlに権限を追加しましたSDカードのパスを具体的に返します。しかし、Lenovoは内部パスを返します。すべての電話には正式な復旧があります。

+0

[この](http://stackoverflow.com/q/40068984/6950238)quesion –

答えて

0
public static HashSet<String> getExternalMounts() { 
    final HashSet<String> out = new HashSet<String>(); 
    String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*"; 
    String s = ""; 
    try { 
     final Process process = new ProcessBuilder().command("mount") 
       .redirectErrorStream(true).start(); 
     process.waitFor(); 
     final InputStream is = process.getInputStream(); 
     final byte[] buffer = new byte[1024]; 
     while (is.read(buffer) != -1) { 
      s = s + new String(buffer); 
     } 
     is.close(); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 

    // parse output 
    final String[] lines = s.split("\n"); 
    for (String line : lines) { 
     if (!line.toLowerCase(Locale.US).contains("asec")) { 
      if (line.matches(reg)) { 
       String[] parts = line.split(" "); 
       for (String part : parts) { 
        if (part.startsWith("/")) 
         if (!part.toLowerCase(Locale.US).contains("vold")) 
          out.add(part); 
       } 
      } 
     } 
    } 
    return out; 
} 

元のメソッドは、いくつかのデバイスでは、外部SDカードのデフォルト名はextSdCardとして表示され、他のことがsdcard1ある

+0

を見てみましょう、それはAPIレベル11で動作しているのですか? –

+0

APIでの作業+16 –

+0

しかし、私は11が必要です。私は質問を編集します。 –

0

をテストし、自分の携帯電話で働きました。このコードスニペットは、正確なパスを見つけるのに役立ち、電話機がノートパソコンに接続されているときにも同様に外部デバイスのパスを取得するのに役立ちます。

private String[] getPaths() 
{ 
    String[] paths = new String[4]; 

if(new File("/storage/extSdCard/").exists()) 
    paths[0]="/storage/extSdCard/"; 
if(new File("/storage/sdcard1/").exists()) 
    paths[1]="/storage/sdcard1/"; 
if(new File("/storage/usbcard1/").exists()) 
    paths[2]="/storage/usbcard1/"; 
if(new File("/storage/sdcard0/").exists()) 
    paths[3]="/storage/sdcard0/"; 

return paths; 
} 
関連する問題