Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Android: Dateiname String nach JNET_URI konvertieren (https://www.delphipraxis.net/209766-android-dateiname-string-nach-jnet_uri-konvertieren.html)

amigage 18. Jan 2022 14:17

Delphi-Version: 11 Alexandria

Android: Dateiname String nach JNET_URI konvertieren
 
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.

philipp.hofmann 18. Jan 2022 21:22

AW: Android: Dateiname String nach JNET_URI konvertieren
 
Bitte schön:
Delphi-Quellcode:
  var fileuri: JNet_Uri;
     TheFile: JFile;
     Intent: JIntent;
  begin
    TheFile:=TJFile.JavaClass.init(StringToJString(filepath), StringToJString(filename));
    //Output: JStringToString(TheFile.getAbsolutePath()));
    fileuri:=TAndroidhelper.JFileToJURI(TheFile);


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr.

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