helfen Da es keine direkte meathod die Wege zu bekommen, ist die Lösung Scannen Sie die /system/etc/vold.fstab Datei sein kann, und suchen Sie nach Zeilen wie diese: dev_mount sdcard/mnt/sdcard 1 /devices/platform/s3c-sdhci.0/mmc_host/mmc0
Wenn eine gefunden wird, spaltete es in seine Elemente und dann die Pfad zu der herausziehen, der Einhängepunkt und Fügen Sie es der Arraylist hinzu
ganz so fügen wir einen Weg hier um sicherzustellen, dass die Liste immer enthält den Pfad zum ersten sdcard, ob real oder emuliert
betonten Text einige Geräte der vold Datei fehlen.
sVold.add("/mnt/sdcard");
try {
Scanner scanner = new Scanner(new File("/system/etc/vold.fstab"));
while (scanner.hasNext()) {
String line = scanner.nextLine();
if (line.startsWith("dev_mount")) {
String[] lineElements = line.split(" ");
String element = lineElements[2];
if (element.contains(":"))
element = element.substring(0, element.indexOf(":"));
if (element.contains("usb"))
continue;
// don't add the default vold path
// it's already in the list.
if (!sVold.contains(element))
sVold.add(element);
}
}
} catch (Exception e) {
// swallow - don't care
e.printStackTrace();
}
}
Nachdem wir nun eine gereinigte Liste der Mount-Pfade haben, testen Sie jeden sicher, dass es ein gültiger und verfügbare Pfad zu machen. Wenn nicht, entfernen Sie es aus der Liste.
private static void testAndCleanList()
{
for (int i = 0; i < sVold.size(); i++) {
String voldPath = sVold.get(i);
File path = new File(voldPath);
if (!path.exists() || !path.isDirectory() || !path.canWrite())
sVold.remove(i--);
}
}
Ok, aber wie kann ich wissen, ob das Gerät interne und externe sdcard by code –
@ Ma7moudHatem hat: Es gibt nichts im Android SDK - zumindest durch Android 4.1 - das sagt Ihnen "wenn das Gerät intern und externe SD Karte nach Code ". – CommonsWare
@MahmoudHatem für die Suche nach dem richtigen Speicherort der internen oder externen SD-Karte müssen Sie DDMS in Ihrem Android SDK verwenden. – UchihaSasuke