2012-02-12 26 views
1

一部の電話機には、2つの外部ストレージディレクトリがあります。たとえば、携帯電話によっては、/sdcard(internal storage)/sdcard/external_sd(リムーバブルスティックなど)があります。これらの2つの指示は、異なる電話で異なる場合があります。たとえば、/sdcard/sdcard/_External_SDがあります。指定したdirがリムーバブルsdcardにあるかどうかを判断する方法はありますか?

私の質問は、特定のディレクトリについて、どこにマウントされているかを判断する方法はありますか?すなわち、このディレクトリが/sdcardまたは/sdcard/external_sdにマウントされているかどうかを調べる方法。ディレクトリ名が異なる電話機で異なるため、正規表現はうまくいきません。このコードを使用する:

Environment.getExternalStorageDirectory() 

「プライマリ」の外部ストレージディレクトリを返すだけで、どちらも役に立ちません。

答えて

1

おそらくmountコマンド出力が役立ちます。

String getAlternateExternalStoragePath() { 
    try { 
     Process process = Runtime.getRuntime().exec("mount"); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
     int read; 
     char[] buffer = new char[1024]; 
     StringBuffer output = new StringBuffer(); 
     while ((read = reader.read(buffer)) > 0) { 
      output.append(buffer, 0, read); 
     } 
     reader.close();  
     process.waitFor(); 

     String sdcardPath = android.os.Environment.getExternalStorageDirectory().toString() + "/"; 
     Pattern pattern = Pattern.compile(".+ on (" + sdcardPath + ".+) type vfat"); 
     Matcher matcher = pattern.matcher(output.toString()); 

     if (matcher.find()) return matcher.group(1); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

// ... 

String alternateExternalStoragePath = getAlternateExternalStoragePath(); 

以下は、あなたの(最初の)代替外部ストレージ・パスを提供します

関連する問題