Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   SD-Karte ermitteln schlägt in Delphi 10.4 fehl (https://www.delphipraxis.net/206853-sd-karte-ermitteln-schlaegt-delphi-10-4-fehl.html)

skoschke 4. Feb 2021 07:55

SD-Karte ermitteln schlägt in Delphi 10.4 fehl
 
In der Funktion
Delphi-Quellcode:
function GetExternalSDCardDirectory: string;
var
  EmulStorage, RootDir, AFile: JFile;
  FileDirs: TJavaObjectArray<JFile>;
  isMounted: JString;
  i: integer;
begin
  EmulStorage := TJEnvironment.JavaClass.GetExternalStorageDirectory();
  Result := JStringToString(EmulStorage.getPath);
  AFile := EmulStorage.getParentFile();
  repeat
    RootDir := AFile;
    AFile := AFile.getParentFile();
  until (AFile = nil) or AFile.getPath().equals(StringToJString('/'));
  if RootDir <> nil then
  begin
    FileDirs := RootDir.listFiles();   <<<<<<<----- FileDirs ist hier Nil!
    for i := 0 to FileDirs.Length - 1 do
    begin
      AFile := FileDirs[i];
      isMounted := TJEnvironment.JavaClass.getStorageState(AFile);
      if isMounted <> nil then
        if TJEnvironment.JavaClass.MEDIA_MOUNTED.equals(isMounted) then
          Exit(JStringToString(AFile.getPath()));
    end;
  end;
end;
bekomme ich einen Laufzeitfehler an der gezeigten Stelle, alle Berechtigungen, die das Programm unter 10.3 hatte hat es in 10.4 auch bekommen...
Fehlt da noch etwas?

Ciao
Stefan

philipp.hofmann 4. Feb 2021 08:34

AW: SD-Karte ermitteln schlägt in Delphi 10.4 fehl
 
Wenn ich deinen Code richtig interpretiere, geht es dir um Android, richtig? Da kommt es dann auch noch auf die Android-Version an. Mittlerweile benötigt man hier den requestLegacyExternalStorage-Eintrag in AndroidManifest_template.xml:

Code:
<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="%package%"
        android:versionCode="%versionCode%"
        android:versionName="%versionName%"
        android:installLocation="%installLocation%">

    <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" />

    <%uses-permission%>
    <uses-feature android:glEsVersion="0x00020000" android:required="True"/>
    <application android:persistent="%persistent%"
        android:restoreAnyVersion="%restoreAnyVersion%"
        android:label="%label%"
        android:debuggable="%debuggable%"
        android:largeHeap="%largeHeap%"
        android:icon="%icon%"
        android:theme="%theme%"
        android:hardwareAccelerated="%hardwareAccelerated%"
        android:resizeableActivity="false"
   android:requestLegacyExternalStorage="true">
Sonst hast du schon mal keine Berechtigung andere Verzeichnisse abzufragen.
Ab Android 11 soll dies nochmals komplizierter werden, konnte ich aber bisher noch nicht verifizieren, bei meinem Samsung S10 mit Android 11 sieht alles noch gut aus.
Ansonsten ermittele ich die SD-Karten-Verzeichnisse für Android gänzlich anders, also falls es weiterhin nicht geht, kurze Info, dann suche ich den Code dafür auch noch raus.

skoschke 4. Feb 2021 08:41

AW: SD-Karte ermitteln schlägt in Delphi 10.4 fehl
 
Ja, es geht um Android, speziell Android 11 wo ich bisher problemlos ein Verzeichnis auf der SD-Karte anlegen und nutzen konnte.

Das Device, welches ich hier nutze, ist ein Galaxy S10+ und hatte gestern ein Systemupdate bekommen.

Die XML Erweiterung hat nichts geändert...

Ciao
Stefan

philipp.hofmann 4. Feb 2021 12:10

AW: SD-Karte ermitteln schlägt in Delphi 10.4 fehl
 
Ich habe es mir auch nochmals angeschaut. Unter Android-11 läuft meine Suche auch nicht mehr. Ist einem geänderten Berechtigungskonzept von Android 11 geschuldet. Dort greift der obenstehende XML-Eintrag nicht mehr.

Man hat nur Zugriff auf zur App passende Verzeichnisse, z.B.
interner Speicher: /storage/emulated/0/Android/data/[AppName]
externer Speicher: /storage/0000-0000/Android/data/[AppName]
nur das die 0000-0000 x beliebige Zahlen sein können (so ist es zumindest bei Samsung). Wie man dies jetzt löst, ist mir auch noch unklar.

skoschke 4. Feb 2021 12:12

AW: SD-Karte ermitteln schlägt in Delphi 10.4 fehl
 
Mist, danke trotzdem, nur diese Antwort habe ich leider nicht erwartet!

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 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