Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android SD-Kartenzugriff (https://www.delphipraxis.net/196494-android-sd-kartenzugriff.html)

sko1 25. Mai 2018 09:15

Android SD-Kartenzugriff
 
Hallo,

seit geraumer Zeit versuche ich vergeblich, in einer Android-App das SD-Kartenverzeichnis zu finden und dort hin Dateien zu schreiben.
Mit
Delphi-Quellcode:
lList := System.IOUtils.TDirectory.GetDirectories('/storage/');

bekomme ich unter anderen auch den Pfad zur SD-Karte (auf meinem Handy in dem Fall '/storage/34AD-43FD') aber dann dort eine Datei zu speichern
Delphi-Quellcode:
fn := lList[i] + PathDelim + 'test.txt';

führt zu Fehlermeldungen.
Die App hat die Berechtigungen zum Lesen und Schreiben der SD-Karte.

Was ist hier falsch?

Ciao
Stefan

himitsu 25. Mai 2018 09:32

AW: Android SD-Kartenzugriff
 
Delphi-Referenz durchsuchenIOUtils.TPath kennst du?

Da findet sich bestimmt was.

sko1 25. Mai 2018 09:49

AW: Android SD-Kartenzugriff
 
Ja, kenne ich, hilft aber nicht weiter!

mit
Delphi-Quellcode:
lList := System.IOUtils.TDirectory.GetDirectories('/sdcard');

bekomme ich die Pfade angeblich der SD-Karte, in diese Pfade kann ich schreiben, nur wenn ich die geschriebenen Daten dann suche finde ich sie mit Eigene Dateien im Gerätespeicher (strorage/emulated/0)!

Es kann doch nicht so schwer sein, die SD-Karte zu finden, dort hinein ein Verzeichnis zu erzeugen und darin Dateien zu lesen und zu schreiben???

Ciao
Stefan

KodeZwerg 25. Mai 2018 11:30

AW: Android SD-Kartenzugriff
 
Du kannst ja mal die External storage helper functions for Android ausprobieren.

sko1 25. Mai 2018 15:31

AW: Android SD-Kartenzugriff
 
Danke für den Tip!
Folgende Testfunktion:

Delphi-Quellcode:

...uses Androidapi.IOUtilsEx;

procedure TForm1.Button3Click(Sender: TObject);
var
  dir: string;
  fn: string;
begin
  dir := GetExternalSDCardDirectory;
  showmessage(dir);
  showmessage(GetSysExternalStorage);
  if isExternalStorageWritable then
    showmessage('beschreibbar')
  else
    showmessage('readonly');
  fn := dir + PathDelim + 'test.txt';
  Memo1.Lines.LoadFromFile(fn);
  CreateDir(dir + PathDelim + 'testdir');
end;
'/storage/34AD-43FD'
'/sdcard'
'beschreibbar'
und eine dort liegende Datei test.txt kann ich lesen, habe also die SD-Karte gefunden!

Aber ich kann kein Verzeichnis erstellen: der Code läuft ohne Fehlermeldung im Debugger durch aber das Verzeichnis entsteht nicht!

Hat jemand eine Idee dazu?

Ciao
Stefan

Rollo62 25. Mai 2018 15:39

AW: Android SD-Kartenzugriff
 
Kanst du denn jetzt damit Files in bestehende Directories schreiben,
und nur noch keine neuen Directories anlegen ?

sko1 25. Mai 2018 15:58

AW: Android SD-Kartenzugriff
 
Lesen ja, schreiben nein, 'permissions denied' als Fehlermeldung.

Ich bin nahe der Verzweiflung, so ein bisschen SD-Kartenzugriff kann doch nicht so schwer sein?!

Ciao
Stefan

KodeZwerg 25. Mai 2018 16:24

AW: Android SD-Kartenzugriff
 
Soweit ich gelesen hatte sperrt Kitkat (ab v3?) schreibzugriffe weswegen ich oben die Komponente Vorschlug.
Ist ja nur 5kb groß, schau mal wie der von Emba das regelt.

timog 25. Mai 2018 21:48

AW: Android SD-Kartenzugriff
 
Ich bin mir nicht 100% sicher, aber ich meine, dass man seit Kitkat auf externen SDCards nur noch in einem Ordner Schreibrechte hat, der zur App gehört (/sdcard/<1111-1111>/Android/data/<bundle kennung>/files/Documents oder so ähnlich).
Will man mehr Schreibrechte, soll es wohl einen Umweg (Ausweg) über das Android Storage Access Framework (SAF) geben. Explorer Apps nutzen dieses Framework z.B.

sko1 26. Mai 2018 08:23

AW: Android SD-Kartenzugriff
 
Zitat:

der zur App gehört (/sdcard/<1111-1111>/Android/data/<bundle kennung>/files/Documents oder so ähnlich).
Prima, danke, ich dachte das ist jetzt die Lösung, aber leider nein!

Ich bekomme weiterhin 'permissions denied' beim Versuch zu schreiben bzw. schon beim Unterverzeichnis anlegen ForceDirectories ein False zurück!

Irgendwo ist da noch ein Trick den ich nicht durchschaut habe!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz