J'ai une variation sur une solution que j'ai trouvé ici
public static HashSet<String> getExternalMounts() {
final HashSet<String> out = new HashSet<String>();
String reg = "(?i).*vold.*(vfat|ntfs|exfat|fat32|ext3|ext4).*rw.*";
String s = "";
try {
final Process process = new ProcessBuilder().command("mount")
.redirectErrorStream(true).start();
process.waitFor();
final InputStream is = process.getInputStream();
final byte[] buffer = new byte[1024];
while (is.read(buffer) != -1) {
s = s + new String(buffer);
}
is.close();
} catch (final Exception e) {
e.printStackTrace();
}
// parse output
final String[] lines = s.split("\n");
for (String line : lines) {
if (!line.toLowerCase(Locale.US).contains("asec")) {
if (line.matches(reg)) {
String[] parts = line.split(" ");
for (String part : parts) {
if (part.startsWith("/"))
if (!part.toLowerCase(Locale.US).contains("vold"))
out.add(part);
}
}
}
}
return out;
}
La méthode originale a été testé et a travaillé avec
- Huawei X3 (stock)
- Galaxy S2 (stock)
- Galaxy S3 (stock)
Je ne suis pas sûr de la version d'android sur quand ils ont été testés.
J'ai testé ma version modifiée, avec
- Moto Xoom 4.1.2 (stock)
- Galaxy Nexus (cyanogenmod 10) à l'aide d'un câble d'otg
- HTC Incredible (cyanogenmod 7.2) cette retourné à la fois interne et externe. Cet appareil est un peu excentrique en interne va en grande partie inutilisé getExternalStorage() renvoie un chemin d'accès à la carte sd à la place.
et de quelques-uns des périphériques de stockage qui utilisent une carte sd comme leur principale de stockage
- HTC G1 (cyanogenmod 6.1)
- HTC G1 (stock)
- HTC Vision/G2 (stock)
À l'exception de l'Incroyable tous ces appareils n'ont retourné leur stockage amovible. Il ya probablement quelques contrôles supplémentaires, je devrais faire, mais c'est au moins un peu mieux que toute solution que j'ai trouvé jusqu'à présent.