AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

Ein Thema von philipp.hofmann · begonnen am 5. Apr 2025 · letzter Beitrag vom 7. Apr 2025
Antwort Antwort
Seite 1 von 2  1 2      
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
923 Beiträge
 
Delphi 10.4 Sydney
 
#1

Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 5. Apr 2025, 15:15
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
Angehängte Dateien
Dateityp: xml AndroidManifest.Delphi12.1.xml (4,7 KB, 4x aufgerufen)
Dateityp: xml AndroidManifest.Delphi12.3.xml (5,6 KB, 2x aufgerufen)

Geändert von philipp.hofmann ( 5. Apr 2025 um 16:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.934 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 5. Apr 2025, 18:41
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
923 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 5. Apr 2025, 18:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.934 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 5. Apr 2025, 20:29
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
923 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 5. Apr 2025, 21:52
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.

Geändert von philipp.hofmann ( 5. Apr 2025 um 22:35 Uhr)
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
923 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 6. Apr 2025, 13:10
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.168 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 6. Apr 2025, 16:48
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.
  Mit Zitat antworten Zitat
philipp.hofmann
Online

Registriert seit: 21. Mär 2012
Ort: Hannover
923 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 6. Apr 2025, 17:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.934 Beiträge
 
Delphi 12 Athens
 
#9

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 6. Apr 2025, 18:21
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.
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 6. Apr 2025 um 18:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.934 Beiträge
 
Delphi 12 Athens
 
#10

AW: Delphi 12.3+Android (10)+SD-Card: .../Android/media/[appName] wird nicht angelegt

  Alt 6. Apr 2025, 20:01
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;
Sebastian Jänicke
AppCentral

Geändert von jaenicke (Gestern um 09:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:53 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