2016-09-27 6 views
0

How can I get external SD card path for Android 4.0+?を含むストレージパスのリストを取得するためにほとんどすべてのソリューションを試しました。しかし、何もリムーバブルSDカードのパスを返します。Androidのすべてのストレージパスを取得

最後に私は"/mnt/"で試しました。これは、他のいくつかのパスを含むすべてのストレージパスも返します。しかし、私はストレージパスだけを必要とします。どのように私はこれを達成することができますか?指定されたパスがストレージパスであるかどうかを検出する方法はありますか、またはすべてのストレージパスを取得するためのより良い方法があるかどうかはAndroidです。

+0

あなたが試したことがわからないので、何か新しいことを提案するのは難しいです。 – greenapps

+0

あなたのコードを実行するAndroidのバージョンは? – greenapps

+0

@greenapps http://stackoverflow.com/questions/11281010/how-can-i-get-external-sd-card-path-for-android-4-0/13648873#13648873からすべてのソリューションを試しました。私のコードはKitKatから実行されます。 – Gunaseelan

答えて

1

Android携帯で利用可能なすべてのストレージを取得するためにこのクラスを使用できます。 このコードは、stackoverflow.comから取られていますが、何らかのエラーが含まれています。私は、Android 6とAndroid 7でテストしたエラーとこのコードを削除します。

public class StorageUtils { 

    private static final String TAG = "StorageUtils"; 

    public static class StorageInfo { 

     public final String path; 
     public final boolean readonly; 
     public final boolean removable; 
     public final int number; 
     StorageInfo(String path, boolean readonly, boolean removable, int number) { 
      this.path = path; 
      this.readonly = readonly; 
      this.removable = removable; 
      this.number = number; 
     } 

     public String getDisplayName() { 
      StringBuilder res = new StringBuilder(); 
      if (!removable) { 
       res.append("Internal Storage"); 
      } else if (number > 1) { 
       res.append("SD card " + number); 
      } else { 
       res.append("SD card"); 
      } 
      if (readonly) { 
       res.append(" (Read only)"); 
      } 
      return res.toString(); 
     } 
    } 

    public static List<StorageInfo> getStorageList() { 

     List<StorageInfo> list = new ArrayList<StorageInfo>(); 
     String def_path = Environment.getExternalStorageDirectory().getPath(); 
     boolean def_path_removable = Environment.isExternalStorageRemovable(); 
     String def_path_state = Environment.getExternalStorageState(); 
     boolean def_path_available = def_path_state.equals(Environment.MEDIA_MOUNTED) 
       || def_path_state.equals(Environment.MEDIA_MOUNTED_READ_ONLY); 
     boolean def_path_readonly = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY); 

     HashSet<String> paths = new HashSet<String>(); 
     int cur_removable_number = 1; 

     if (def_path_available) { 
      paths.add(def_path); 
      list.add(0, new StorageInfo(def_path, def_path_readonly, def_path_removable, def_path_removable ? cur_removable_number++ : -1)); 
     } 

     BufferedReader buf_reader = null; 
     try { 
      buf_reader = new BufferedReader(new FileReader("/proc/mounts")); 
      String line; 
      while ((line = buf_reader.readLine()) != null) { 

       if (line.contains("vfat") || line.contains("/mnt") || line.contains("sdcardfs")) { 
        Log.d(TAG, line); 
        StringTokenizer tokens = new StringTokenizer(line, " "); 
        String mPath = tokens.nextToken(); //device 
        String mount_point = tokens.nextToken(); //mount point 
        if (paths.contains(mount_point)) { 
         continue; 
        } 
        String unused = tokens.nextToken(); //file system 
        List<String> flags = Arrays.asList(tokens.nextToken().split(",")); //flags 
        boolean readonly = flags.contains("ro"); 

         if (!line.contains("/mnt/secure") 
           && !line.contains("/mnt/asec") 
           && !line.contains("/mnt/obb") 
           && !line.contains("/dev/mapper") 
           && !line.contains("tmpfs")) { 
          File testFile = new File(mount_point); 
          if(testFile.isDirectory() && testFile.listFiles() != null) { 
           paths.add(mount_point); 
           list.add(new StorageInfo(mount_point, readonly, true, cur_removable_number++)); 
          } 
         } 
       } 
      } 

     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      if (buf_reader != null) { 
       try { 
        buf_reader.close(); 
       } catch (IOException ex) {} 
      } 
     } 
     return list; 
    } 
} 

このヘルプが必要です。

+0

私は時々この答えをチェックします..ありがとう。 +1を追加しました。 – Gunaseelan

関連する問題