2019 May 06.
https://qiita.com/h_yama37/items/11b8658b2de9625200aa より
private final Context AppContext;
private final String file;
// android端末内の外部ストーリッジ確認
List sdCardFilesDirPaths = SdCardDirPaths.getSdCardFilesDirPathListForLollipop( AppContext );
Collections.sort(sdCardFilesDirPaths, new CompStringLength());
for (String p : sdCardFilesDirPaths) {
Log.d("My", "SDパスの1つ: " + p);
}
externalPath = sdCardFilesDirPaths.get(0);
externalPath = externalPath.replaceAll("/Android.*$", "");
Log.d("My", "SDパス: " + externalPath);
// get filePath
final String sourcePath = externalPath + "/" + file;
Log.d("My", "sourcePath " + sourcePath );
if ( new File(sourcePath).exists()) {
Log.d("My", sourcePath + " exists.");
} else {
Log.d("My", sourcePath + " not exist.");
}
SdCardDirPaths.java
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Environment;
import android.util.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class SdCardDirPaths {
/**
* SDカードのfilesディレクトリパスのリストを取得する。
* Android5.0以上対応。
*
* @param context
* @return SDカードのfilesディレクトリパスのリスト
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static List getSdCardFilesDirPathListForLollipop(Context context) {
List sdCardFilesDirPathList = new ArrayList<>();
// getExternalFilesDirsはAndroid4.4から利用できるAPI。
// filesディレクトリのリストを取得できる。
File[] dirArr = context.getExternalFilesDirs(null);
for (File dir : dirArr) {
if (dir != null) {
String path = dir.getAbsolutePath();
Log.d("My", "Externalパスの1つ: " + path);
// isExternalStorageRemovableはAndroid5.0から利用できるAPI。
// 取り外し可能かどうか(SDカードかどうか)を判定している。
if (Environment.isExternalStorageRemovable(dir)) {
// 取り外し可能であればSDカード。
if (!sdCardFilesDirPathList.contains(path)) {
sdCardFilesDirPathList.add(path);
}
} else {
// 取り外し不可能であれば内部ストレージ。
}
}
}
return sdCardFilesDirPathList;
}
}
CompStringLength.java
import java.util.Comparator;
public class CompStringLength implements Comparator {
@Override
public int compare(String first, String second){
//null評価
//両方nullなら等価とする
if(first == null && second == null){
return 0;
}
//片方nullなら、nullを小さいとする。
if(first == null){
return -1;
}else if(second == null){
return 1;
}
//idの文字列長でソート。文字列数がが小さい順に並べる。
if(first.length() > second.length()){
return 1;
}else if(first.length() < second.length()){
return -1;
}else if(first.length() == second.length()){
return 0;
}
return 0;
}
}