AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen
Thema durchsuchen
Ansicht
Themen-Optionen

Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

Ein Thema von dynamo · begonnen am 17. Mai 2023 · letzter Beitrag vom 17. Mai 2023
Antwort Antwort
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#1

Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

  Alt 17. Mai 2023, 10:53
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.
Jörg

Geändert von dynamo (17. Mai 2023 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Klapauzius

Registriert seit: 8. Feb 2018
Ort: Region Bern (Schweiz)
74 Beiträge
 
Delphi 12 Athens
 
#2

AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

  Alt 17. Mai 2023, 11:08
Ab Android 11 (API level 30) ist kein Zugriff mehr auf den externen Storage erlaubt:
https://developer.android.com/about/...rivacy/storage
Albert
  Mit Zitat antworten Zitat
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

  Alt 17. Mai 2023, 13:50
Ab Android 11 (API level 30) ist kein Zugriff mehr auf den externen Storage erlaubt:
das kann so nicht stimmen: ich benutze parallel noch meine apps unter Delphi 10.4 und lade sie auf meine Android-Geräte mit Android 9,11 und 13 hoch. ALLES !! funktioniert wunderbar! Lediglich meine Migration auf Delphi 11.3 macht Schwierigkeiten, obwohl ich dort das selbe SDK benutze wie bereits unter D10.2 und D10.4.
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.
Jörg

Geändert von dynamo (17. Mai 2023 um 14:16 Uhr)
  Mit Zitat antworten Zitat
Klapauzius

Registriert seit: 8. Feb 2018
Ort: Region Bern (Schweiz)
74 Beiträge
 
Delphi 12 Athens
 
#4

AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

  Alt 17. Mai 2023, 14:07

das kann so nicht stimmen
Wenn du Googles Dokumentation nicht glaubst, wem soll man dann noch glauben wenn es um Android geht?

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:
https://en.delphipraxis.net/topic/85...#comment-72102
Albert

Geändert von Klapauzius (17. Mai 2023 um 14:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Kann in Delphi 11.3 FMX-Android kein Verzeichnis anlegen

  Alt 17. Mai 2023, 15:55
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.

Delphi-Referenz durchsuchenTPath ähhhh Delphi-Referenz durchsuchenIOUtils.TPath
https://stackoverflow.com/questions/...-path-problems
$2B or not $2B

Geändert von himitsu (17. Mai 2023 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:04 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