Zuverlässig alle "storage" -Pfade erkennen

  • Antworten:7
LitteM
  • Forum-Beiträge: 141

02.05.2016, 00:04:52 via Website

Hallo zusammen,

habe mittlerweile so viel unterschiedliches Gelesen, daher möchte ich auf Nummer sicher gehen und nachfragen. Wenn ich z.B. mit meinem S4 getExternalStorageDirectory() verwende, bekomme ich nicht (wie zuerst plump gedacht) den Pfad zur SD Karte.

Dann bin ich über viel zu viele Posts mit unterschiedlichen Aussagen gestolpert - wie man jetzt an die Adresse der "wirklichen" SD Karte kommt. Das ganze soll ja wohl stark Abhängig davon sein, was der Hersteller hier als "extern" definiert.

Mit getExternalFilesDirs() bekomme ich zwar beides angezeigt - allerdings ist das die volle Adresse zum File Ordner für die App. Darf ich hier jetzt einfach die Adresse vor dem KeyWord "Android" abschneiden und das dann so nutzen? Oder falle ich damit irgendwie auf die Nase?

Zu meinem Anwendungsfall: Der User soll den Speicherort von Musik-Daten angeben, welche die die App dann verwenden soll. Dafür brauche ich "intern" wie "extern" einen Startpunkt. Von dem aus sollte der User dann zum gewünschten Ort navigieren.

Vielleicht gibt es eine andere Variante mit der ich dem User einfacher eine Ordner-Location spezifizieren lasse?

Viele Dank :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.05.2016, 07:39:57 via App

Du darfst garnicht die Pfade benutzen. Du musst dem User direkt einen "OpenFileDialog" zeigen indem er selber wählen kann zwischen SD oder internem Speicher.
Damit ist dann der Pfad klar.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
LitteM
  • Forum-Beiträge: 141

02.05.2016, 10:38:11 via Website

Das ist eigentlich mein Plan. Allerdings muss ich doch irgendwo einen Startpunkt in Form eines Pfades vorgeben?

/edit:
Ist die korrektere Lösung dann über einen Intent?

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);

Hier ließe sich zwar der Pfad zu einem File einohlen, aber einen übergeordneten Ordner kann ich nicht auswählen.

Am Ende hätte ich halt gerne folgendes:

Der User soll mir die Speicherorte von 2 Genre's angeben. Für jedes Genre möchte ich mir dann alle abspielbaren Musikdateien aus dem spezifizierten Ordner, und allen Unterordneren, in ne Liste schreiben.

— geändert am 02.05.2016, 11:15:07

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.05.2016, 12:39:59 via Website

Scheint es von Haus aus bei Android nicht zu geben.
Externe libs können das aber:
https://github.com/passy/Android-DirectoryChooser

Oder in dem Ordner muss es ein File geben zum auswählen und du schneidest den Dateinamen ab.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
LitteM
  • Forum-Beiträge: 141

02.05.2016, 12:53:59 via Website

Habe angefangen das mit dem Abschneiden zu machen. Biete dann halt die Möglichkeit an, x Ebenen höher mit in die Suche einzubinden. Bisschen von hinten durchs Knie, aber hauptsache es läuft dann erstmal :D

Antworten
LitteM
  • Forum-Beiträge: 141

02.05.2016, 18:22:00 via Website

Wenn ich mir in onActivityResult mit

 String filePath = data.getData().getPath();

den Pfad von meinem ausgewählten File geben lasse, dann sieht der folgendermaßen aus:

/document//storage/extSdCard/Test/Eins.mp3

Woher kommt denn dieser Präfix "/document"? Ist der standardmäßig dabei? Der stört mich natürlich etwas beim weiterverwenden :O

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

02.05.2016, 18:44:48 via App

Keine Ahnung woher das kommt. Aber es gibt Methoden die URI des Files selber in einen Pfad unzuwandeln. vlt. ist das ja besser als der Standardweg.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
LitteM
  • Forum-Beiträge: 141

03.05.2016, 12:41:05 via Website

Habe gestern noch einiges probiert - bin aber mit den bisherigen Ansätzen nicht zum gewünschten Ergebnis gekommen.
Habe es heute morgen mal über den MediaStore versucht. Das war eigentlich das, was ich gerne möchte.

Habe mit dem nach external music gescannt. Hier hat er mir sofort alle mp3's der SD Karte und alle mp3's aus dem default "Music" Ordner des "internen" Speichers gelistet. Das hier auch eigentlich internes dabei ist, liegt wohl daran dass mein Handy einen Teil meines internen Speichers als extern ansieht. getExternalStorageDirectory() liefert bei mir ja auch nur "internes". Wenn ich richtig liege, ändert sich das aber je nach Android Version und Gerät, korrekt? Zumindest sagt mir das google.

Das schöne vom MediaStore: Er gibt die korrekten Pfade zurück. Ich denke, dass ich mit der Variante dann am besten fahre. Auf der Basiskann ich mir dann einen "chose-directory" Dialog basteln :)

— geändert am 03.05.2016, 12:42:56

Antworten