Pfad zur externen SD-Karte ermitteln

  • Hallo Zusammen,


    ich würde gerne Daten auf die extern SD-Karte schreiben. Auf die Karte, die ich physisch in das Tablet bzw Handy gesteckt habe. Nicht auf die interne emulierte Karte. Leider habe ich mit google noch kein zufriedenstellendes Ergebnis gefunden.


    Über einen Explorer habe ich zum vergleichen die Namen der Verzeichnisse ermittelt.
    Auf meinen Tablet, Android-Version 4.1.2 sind das:
    /storage/sdcard0
    /storage/extSdCard
    /storage/UsbDriveA
    bis
    /storage/UsbDriveE


    Auf meinen Handy, Android-Version 8.1.0 sind das:
    /storage/emulate/0
    /storage/sdcard
    /storage/self



    Die Funktion getExternalStorageDirectory() liefert mir bei beiden Geräten die interne emulierte SD-Karte, also /storage/sdcard0 und /storage/emulate/0. Die ich aber nicht haben möchte.



    Mit der Funktion System.getenv("SECONDARY_STORAGE").toString() bekomme ich bei meinen Tablet den String "/storage/extSdCard:/storage/UsbDriveA:/storage/UsbDriveB:", der String geht bis UsbE. hier könnte ich den String zerlegen und so den Pfad für die externe SD-Karte erhalten. Bei meinem Handy liefert mir die Funktion allerdings einen leeren String.



    Dann habe ich versucht, mir mit


    Java
    File storage_dir = new File("/storage");
    File[] files = storage_dir.listFiles();
    for( File file : files){
        Toast.makeText(this, file.getAbsolutePath(), Toast.LENGTH_LONG).show();
    }

    die Verzeichnisse in /storage anzeigen zu lassen. Auf meinem Tablet bekomme ich die oben aufgeführten Verzeichnisse alle einzeln angezeigt. Auf meinem Handy bekommen ich nur das Verzeichniss /storage/self angezeigt.


    Mit den Funktionen des StorageManager getSystemService(STORAGE_SERVICE) und getStorageVolumes() bekomme ich auf meiem Handy alle Pfade zurückgegeben. Leider ist sind die Funktionen erst SdkVersion 24 und funktionieren nicht auf älteren Geräten, wie meinem Tablet.


    Gibt es irgendeine Möglichkeit, wie man den Pfad zu der externen SD-Karte ermitteln kann, die sowohl auf älteren als auch auf neueren Geräten funktioniert ???

  • Hallo


    Die einzige Möglichkeit die ich kenne ist über die Mounts vom „/proc/mounts“ zu gehen.In dieser Datei suchst du nach den „/dev/block und dhinter steht der Phat zu den gemounteten Volumen


    /dev/block/vold/public:253,64 /mnt/media_rw/120D-1904 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0




    Leider geht bei mir der Zugriff auf die SD-Karte ab API 23 nicht mehr über diesen weg.
    Über „/storage/120D_1904/“ kann ich lesen aber nicht schreiben
    Über „/mnt/media_rw/120D_1904/“ kann ich weder lesend noch schreibend zugreifen
    Wie ist das bei Dir?


    Deshalb benutze ich dann die Abfrage über
    „ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);"
    Da muss der User eben die richtige Karte auswählen und du kannst in der onActivityResult dann darauf zugreifen,
    für weitere zugriffe speichere ich die Uri in den SharedPref.


    Ab API24 nutze ich StorageManager mit getStorageVolumes().



    Eine allgemein gültige Lösung ist mir nicht bekannt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!