![]() |
Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Meine bisherigen Apps, die ich bis einschl. Delphi 10.4 geschrieben habe, möchte ich nun auf Delphi 11.3 migrieren. Aber da knirscht es leider mächtig im Gebälk.
Es fäng damit an, dass ich die Permissions anpassen musste (ich hoffe, dass ich das so richtig gemacht habe (s.Code). Nun habe ich Probleme damit, Verzeichnisse anzulegen. Bis einschl. Delphi 10.4 FMX habe ich das immer so gemacht und es hat funktioniert. Jetzt geht das leider nicht mehr so. Warum nicht?
Delphi-Quellcode:
// ein Beispielcode mit Permissions und Verzeichnis anlegen in D11.3
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,FMX.DialogService,system.permissions, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private-Deklarationen } FRead, FWrite:string; procedure SetPermissions; procedure MakeReadWritePermissionRequestResult(Sender:TObject;const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray); procedure DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc); public { Public-Deklarationen } end; var Form1: TForm1; zugriffErlaubt :boolean = false; implementation uses Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os; {$R *.fmx} procedure TForm1.Button1Click(Sender: TObject); // dies ist für mich der wichtigste Teil var basisdir,dir,Verzeichnis: string; begin basisdir := '/storage/emulated/0/'; dir := 'testdir'; Verzeichnis := basisdir+dir; showmessage('Zugriff erlaubt= '+BoolToStr(zugriffErlaubt,true)+' auf '+Verzeichnis); // if zugriffErlaubt then // if not System.SysUtils.directoryexists(basisdir+dir) then System.SysUtils.ForceDirectories(Verzeichnis); // funzt leider nicht. bis D10.4 ging's aber so. Auch mit Android 13 end; procedure TForm1.DisplayRationale(Sender: TObject; const APermissions: TClassicStringDynArray; const APostRationaleProc: TProc); begin TDialogService.ShowMessage('Berechtigung erforderlich', procedure(const AResult: TModalResult) begin APostRationaleProc; end) end; procedure TForm1.FormActivate(Sender: TObject); begin setpermissions; end; procedure TForm1.SetPermissions; begin if CompilerVersion <= 32 then exit; FRead := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE); FWrite := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE); PermissionsService.RequestPermissions([FRead,FWrite],MakeReadWritePermissionRequestResult, DisplayRationale); end; procedure TForm1.MakeReadWritePermissionRequestResult(Sender:TObject;const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray); begin if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) then zugriffErlaubt := True else zugriffErlaubt := False; end; end. |
AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Ab Android 11 (API level 30) ist kein Zugriff mehr auf den externen Storage erlaubt:
![]() |
AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Zitat:
Es ist mir wohl bekannt, dass man GetDocumentsPath benutzen soll. Da hab ich leider ein großes Problem mit: Ich weiß nicht, wo ich auf meinem Gerät meine Daten wiederfinde - vielleicht bin ich tatsächlich zu blöd dazu? Wenn ich mir z.B. mit showmessage(GetDocumentPath) das Verzeichnis anzeigen lasse, hab ich das Gefühl, dass mir irgendein Fantasieverzeichnis angezeigt wird. Mit einem Dateimanager wie z.B. Totalcommander kann ich dieses Verzeichnis jedenfalls nicht finden. Ich hatte in der Vergangenheit auch mal mit GetDocumentPath experimentiert und es hat auch wunderbar funktioniert, aber ich wusste nicht, wo meine gespeicherten Daten auf dem Gerät zu finden sind. Mit sowas kann ich leider nichts anfangen. Deshalb habe ich mir angewöhnt, eigene Verzeichnisse anzulegen. |
AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Zitat:
Schau doch mal nach welche Einstellungen du bei Delphi 10.4 unter SDK API und bei Delphi 11.3 hast. Ich denke du kompilierst für eine neuere SDK Version unter Delphi 11. Edit: Ähnliche Diskussion in der englischsprachigen DP: ![]() |
AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Außerdem niemals hard-codierte Pfade verwenden.
Schon im Windows war das eine Todsünde, aber hier wird es noch schlimmer. Wer sagt dir, dass es eine SD-Karte gibt und ob sie wirklich dort gemountet wurde? Weil z.B. zu viele Entwickler sowas wie C:\Windows oder C:\Programme oder C:\Programs benutzt haben, knallten früher ständig irgendwelche Schrottprogramme. ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz