外付けSDカードを装着しないタイプの Android端末 GALAXY NEXUS SC-01D などは、
android.os.Environment # getExternalStorageState() の結果は常にマウント済みである。
それを注意して、SDカードの使用可を問い合わせるメソッドをまとめた。
import java.io.File;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Environment;
import android.preference.PreferenceManager;
/**
* SdCardUtil
*/
public final class SdCardUtil{
private SdCardUtil(){}
/**
* SDカードマウント済みで使用できるか?
* @return true=使用可能
*/
public static boolean isSDcardExists(){
try{
File f = new File(System.getenv("EXTERNAL_STORAGE"));
if (!f.exists()) return false;
if (!f.isDirectory()) return false;
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) return false;
if (f.listFiles().length > 0){
return true;
}
}catch(Throwable e){
}
return false;
}
/**
* SDカードマウント先のPATH
* @return
*/
public static String sdcardPath(){
return System.getenv("EXTERNAL_STORAGE");
}
}