2019年5月6日月曜日

android開発 外部ストーリッジ/SDカードのパスの取得

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;
    }
}

0 件のコメント:

コメントを投稿