2019年5月6日月曜日

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

2019 May 06.

https://qiita.com/h_yama37/items/11b8658b2de9625200aa より


  1. private final Context AppContext;
  2. private final String file;
  3.  
  4. // android端末内の外部ストーリッジ確認
  5. List sdCardFilesDirPaths = SdCardDirPaths.getSdCardFilesDirPathListForLollipop( AppContext );
  6. Collections.sort(sdCardFilesDirPaths, new CompStringLength());
  7. for (String p : sdCardFilesDirPaths) {
  8. Log.d("My", "SDパスの1つ: " + p);
  9. }
  10. externalPath = sdCardFilesDirPaths.get(0);
  11. externalPath = externalPath.replaceAll("/Android.*$", "");
  12. Log.d("My", "SDパス: " + externalPath);
  13. // get filePath
  14. final String sourcePath = externalPath + "/" + file;
  15. Log.d("My", "sourcePath " + sourcePath );
  16. if ( new File(sourcePath).exists()) {
  17. Log.d("My", sourcePath + " exists.");
  18. } else {
  19. Log.d("My", sourcePath + " not exist.");
  20. }

SdCardDirPaths.java
  1. import android.annotation.TargetApi;
  2. import android.content.Context;
  3. import android.os.Build;
  4. import android.os.Environment;
  5. import android.util.Log;
  6.  
  7. import java.io.File;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10.  
  11. public class SdCardDirPaths {
  12. /**
  13. * SDカードのfilesディレクトリパスのリストを取得する。
  14. * Android5.0以上対応。
  15. *
  16. * @param context
  17. * @return SDカードのfilesディレクトリパスのリスト
  18. */
  19. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  20. public static List getSdCardFilesDirPathListForLollipop(Context context) {
  21. List sdCardFilesDirPathList = new ArrayList<>();
  22. // getExternalFilesDirsはAndroid4.4から利用できるAPI。
  23. // filesディレクトリのリストを取得できる。
  24. File[] dirArr = context.getExternalFilesDirs(null);
  25. for (File dir : dirArr) {
  26. if (dir != null) {
  27. String path = dir.getAbsolutePath();
  28. Log.d("My", "Externalパスの1つ: " + path);
  29. // isExternalStorageRemovableはAndroid5.0から利用できるAPI。
  30. // 取り外し可能かどうか(SDカードかどうか)を判定している。
  31. if (Environment.isExternalStorageRemovable(dir)) {
  32. // 取り外し可能であればSDカード。
  33. if (!sdCardFilesDirPathList.contains(path)) {
  34. sdCardFilesDirPathList.add(path);
  35. }
  36. } else {
  37. // 取り外し不可能であれば内部ストレージ。
  38. }
  39. }
  40. }
  41. return sdCardFilesDirPathList;
  42. }
  43. }

CompStringLength.java
  1. import java.util.Comparator;
  2.  
  3. public class CompStringLength implements Comparator {
  4. @Override
  5. public int compare(String first, String second){
  6. //null評価
  7. //両方nullなら等価とする
  8. if(first == null && second == null){
  9. return 0;
  10. }
  11. //片方nullなら、nullを小さいとする。
  12. if(first == null){
  13. return -1;
  14. }else if(second == null){
  15. return 1;
  16. }
  17. //idの文字列長でソート。文字列数がが小さい順に並べる。
  18. if(first.length() > second.length()){
  19. return 1;
  20. }else if(first.length() < second.length()){
  21. return -1;
  22. }else if(first.length() == second.length()){
  23. return 0;
  24. }
  25. return 0;
  26. }
  27. }

0 件のコメント:

コメントを投稿