Einzelnen Beitrag anzeigen

amigage

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

Android 11+: Verzeichnis auslesen

  Alt 8. Feb 2022, 15:10
Hallo,

irgendwie komme ich nicht weiter. Ich möchte ab Android 11 eine Datensicherung meiner App-Daten einlesen.
Der Nutzer gibt der App den Zugriff auf ein Verzeichnis, von dem ich die Liste der Dateinamen haben möchte, um sie dann einzeln ins App Verzeichnis kopieren zu können.

Delphi-Quellcode:
  procedure GetFolderAccess(StartUri: JNet_Uri);
  var
    Intent: JIntent;
  begin
    Intent := TJIntent.Create;
    Intent.setAction(TJIntent.JavaClass.ACTION_OPEN_DOCUMENT_TREE);
    Intent.putExtra(TJDocumentsContract.JavaClass.EXTRA_INITIAL_URI, JParcelable(StartUri));

    MainActivity.startActivityForResult(Intent, cDirectory_Tree_Ac);
  end;
sowie
Delphi-Quellcode:
procedure TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent);
var
  docUri, Uri: JNet_Uri;
  TheFolder : JFile;
  TheFFiles : TJavaObjectArray<JFile>;
  i : integer;
begin
  Memo1.Lines.Clear;
  if ResultCode = TJActivity.JavaClass.RESULT_OK then
  begin
    // Result data user selected
    // contains a URI for the document or directory.
    Uri := nil;
    if Assigned(Data) then
    begin
      if (Data = nil) then
      begin
        Memo1.Lines.Add('Uri nicht abgerufen!');
        exit;
      end;
      UriCan := Data.getData;

      if RequestCode = cDirectory_Tree_Ac then
      begin
        myToast('Berechtigung zum Zugriff auf Elemente im Verzeichnis ' + JStringToString(UriCan.getPath{ toString}) + ' erteilt.');

        docUri := DocumentsContract.JavaClass.buildDocumentUriUsingTree(Uri, DocumentsContract.JavaClass.getTreeDocumentId(Uri));
        memo1.Lines.Add(JStringToString(docUri.toString));
        
        TheFolder := TJFile.JavaClass.init(docUri.toString);
        TheFFiles := TheFolder.listFiles;


        for i := 0 to TheFFiles.Length-1 do <<<=============================== hier steigt die App aus
           memo1.Lines.Add(i.ToString); //(TheFFiles.Items[i].toString));
      end;
    end;
  end;
end;
In der Schleife steigt die App aus. Wie kann ich durch die gefundene Dateiliste gehen, um die einzelnen Dateinamen zu erhalten?

Danke.
  Mit Zitat antworten Zitat