Für den Dateizugriff ab Android 11 habe ich folgende Seite mit Delphi Code gefunden.
https://www.delphican.com/showthread...47560#pid47560
Der Quellcode findet sich hier:
https://github.com/emozgun/delphi-android-SAF
Damit bekomme ich Zugriff auf die Dateien. Mein Problem ist nur, dass ich den Wert als JNET_URI erhalte.
Ich kann zwar den Pfad, wie z.B.
content://com.android.externalstorage.documents/document:3830-6335%3ADocuments%2FmeineDatei.ext auslesen und als String speichern, aber wie kann ich beim nächsten Start der App wieder auf diese Datei zugreifen, um z.B. den Dateinamen anzuzeigen und den Zugriff darauf zu bekommen?
Also ich habe es so versucht, komme aber leider nicht weiter:
Delphi-Quellcode:
var
fileuri: JNet_Uri;
//...
strExtFilename := '
content://com.android.externalstorage.documents/document:3830-6335%3ADocuments%2FmeineDatei.ext';
// wird normalerweise aus einer ini gelesen
if (strExtFilename.StartsWith('
content://'))
then
begin
fileuri := TAndroidHelper.StrToJURI(strExtFilename);
strFilenameDisplay := GetFilename_FromUri(fileUri);
end;
Delphi-Quellcode:
function GetFilename_FromUri(
Uri: JNet_Uri):
string;
var
C: JCursor;
begin
result := '
';
try
C := TAndroidHelper.Activity.getContentResolver.query(
Uri,
nil,
nil,
nil,
nil,
nil);
if (C =
nil)
then
exit;
C.moveToFirst;
result := JStringToString(C.getString(C.getColumnIndex(TJOpenableColumns.JavaClass.DISPLAY_NAME)));
finally
C.close;
end;
end;
Leider stürzt die App dabei ab, da vermutlich die fileuri nicht komplett ist. Ich weiß aber nicht, wie man die Datei parsen lassen kann, ohne das der Anwender sie neu über das Storage
Access Network auswählen muss.
Ich hoffe, jemand kann mir dabei helfen.