Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt (https://www.delphipraxis.net/217006-delphi-12-3-android-10-sd-card-android-media-%5Bappname%5D-wird-nicht-angelegt.html)

philipp.hofmann 5. Apr 2025 15:15

Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

ich migriere gerade von Delphi 12.1 auf Delphi 12.3. Dabei ist mir aufgefallen, dass das Verzeichnis
.../Android/media/[appName] auf der SD-Karte nicht mehr angelegt wird. Zumindest auf meinem Android 10 Tablet. Das Verzeichnis
.../Android/data/[appName] ist aber da.

Ich kann keinen Unterschied in der Manifest-Datei feststellen (siehe Anhang). Was nur auch auffällt ist, dass ich bei der Delphi 12.1-Version PermissionsService.RequestPermissions für READ_EXTERNAL_STORAGE und WRITE_EXTERNAL_STORAGE gar nicht aufrufen muss und es geht trotzdem. In der Delphi 12.3-Version muss ich es aufrufen.

Weißt da jemand mehr drüber. Ich habe mir jetzt schon mal extra ein Android-13-Tablet bestellt. Wenn dies nur ein Android<=10-Problem ist, wäre es eventuell verschmerzbar, sind bei Tablets aber auch noch gut 16 Prozent der Nutzer.

Grüße, Philipp

jaenicke 5. Apr 2025 18:41

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Das liegt am neueren SDK. Du siehst ja im Manifest, dass dieses von 34 auf 35 erhöht wurde.

Die Frage ist, wie du auf die Verzeichnisse zugreifst. Das Stichwort ist "Scoped Storage". Bei den Zugriffsrechten hat sich sehr viel getan in den letzten Versionen.

Das media-Verzeichnis wird z.B. nur noch angelegt, wenn du auch eine Datei darin speicherst. Data wiederum kannst du ohne weitere Permissions nicht mehr nutzen. Die neuen Permissions READ_MEDIA_IMAGES usw. hast du im Manifest nicht drin, brauchst du aber auch nur, wenn du außerhalb von \media arbeiten möchtest.

philipp.hofmann 5. Apr 2025 18:53

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Aber es geht ja um mein Android 10-Tablet. Da sind die ganzen neuen Berechtigungen ja noch nicht in Verwendung. Dies sollte sich doch so verhalten, wie davor auch, auch wenn das Max-SDK erhöht wurde. Oder verstehe ich dies falsch?
Ich nutze daher schon seit Jahr und Tag das Media-Verzeichnis und nicht das Data-Verzeichnis für Dateien, die die Nutzer von außen zusteuern können.
Aber ich werde einmal ausprobieren, etwas im media-Verzeichnis des Gerätes zu speichern, ob dann etwas auf der SD-Karte passiert.

jaenicke 5. Apr 2025 20:29

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Nein, ganz so ist es nicht. Manches passiert wirklich erst unter Android 11 und höher. Aber Scoped Storage gab es z.B. bereits in Android 10, wurde aber mit SDK 29 usw. noch nicht forciert. Wenn du aber SDK 35 verwendest, musst du nun Scoped Storage nutzen. Deshalb hängt das auch vom Target SDK ab, auch wenn es sich um das gleiche Android 10 Tablet handelt.

Die genauen Funktionsweisen kann ich dir leider nicht nennen, denn dazu kenne ich mich nicht gut genug aus.

Du solltest mit Delphi 12.3 aber auch problemlos das alte SDK nutzen können, sofern es installiert ist. Wenn es da ist, kannst du die targetSdkVersion einfach wieder auf den alten Wert 34 setzen. Dann sollte das Verhalten wie vorher sein.

philipp.hofmann 5. Apr 2025 21:52

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Auch das Setzen von targetSDKVersion auf 34 in den Projektoptionen hat leider das alte Verhalten nicht hervorgezaubert. Das media-Verzeichnis auf der SD-Karte wird nicht angelegt, nur das data-Verzeichnis. Da ich weiß, dass der Zugriff auf das Media-Verzeichnis in der App bisher bis mindestens Android 15 funktioniert, bin ich eigentlich guter Dinge, dass wir alles notwendige schon umgesetzt haben. Mal schauen, ob wir dies auch noch rausbekommen.

philipp.hofmann 6. Apr 2025 13:10

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Als Workaround habe ich die App schon mal so umgebaut, dass ich auch Daten direkt von der SD-Karte von /Android/data/com.icTrainer/files verwenden kann. Dies dann mal mit Android 13 durchtesten und ich verliere dann wenigstens keine Funktion. Ich vermute nur aktuell, dass die Nutzer nicht ganz so einfach an das data-Verzeichnis im Datei-Explorer rankommen, wie an das media-Verzeichnis. Das sehe ich dann aber auch nochmals.

Rollo62 6. Apr 2025 16:48

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Die Frage ist auch, wenn man so Verzeichnisse oder Zugriffsmethoden umstellt, wie man die alten Daten dahin rüberretten kann.
Das geht ja theoretisch über die Cloud-Drives, aber wie genau der Prozess aussehen soll, wenn der alte Zugriff plötzlich nicht mehr geht, ist mir schleierhaft.
Ich rechne da auch immer mit Datenverlust, oder man hat die Möglichkeit das einfach in seiner eigenen Cloud zu speichern und zu verwalten.

philipp.hofmann 6. Apr 2025 17:43

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Ich denke, dass bei allen alten Installationen das Verzeichnis mit den richtigen Berechtigungen auf der SD-Card noch existiert. Das Problem ist ja "nur", dass dieses nicht mehr wie zuvor automatisch und mit den richtigen Berechtigungen angelegt wird und ich weiß bisher nicht, wie man die Anlage von außen anstoßen kann.

jaenicke 6. Apr 2025 18:21

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Was machst du denn mit dem Verzeichnis? Versuchst du da eine Datei anzulegen? Mit einer höheren SDK Version wird das Verzeichnis, wie schon geschrieben, vorher nicht angelegt. Es sollte aber das richtige Verzeichnis auch zukünftig sein.

jaenicke 6. Apr 2025 20:01

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
 
Ich habe es ausprobiert. Wie in der Doku steht, wird das Verzeichnis in der aktuellen SDK Version erst angelegt, wenn man dessen Pfad abruft. Eine Datei abzulegen ist gar nicht nötig. Der Aufruf von getExternalMediaDirs genügt:
Delphi-Quellcode:
uses
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers;

function GetExternalMediaPath: string;
var
  Context: JContext;
  mediaDirs: TJavaObjectArray<JFile>;
  mediaDir: JFile;
begin
  Result := '';
  Context := TJContext.Wrap(SharedActivity);
  if Context <> nil then
  begin
    mediaDirs := Context.getExternalMediaDirs;
    if (mediaDirs <> nil) and (mediaDirs.Length > 0) then
    begin
      mediaDir := mediaDirs.Items[0];
      if mediaDir <> nil then
        Result := JStringToString(mediaDir.getAbsolutePath);
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 Uhr.
Seite 1 von 2  1 2      

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