Einzelnen Beitrag anzeigen

amigage

Registriert seit: 11. Nov 2005
Ort: Leipzig
270 Beiträge
 
Delphi 11 Alexandria
 
#1

Android: Dateiname String nach JNET_URI konvertieren

  Alt 18. Jan 2022, 14:17
Delphi-Version: 11 Alexandria
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.

Geändert von amigage (18. Jan 2022 um 14:27 Uhr)
  Mit Zitat antworten Zitat