Wow cool, habe meine Zeitplanung nur um 300% überschritten- ich werde halt immer besser
Aber im Ernst: die "wahre" Lösung scheint es nicht zu geben. Wieviele unterschiedliche Geräte Arten letztendlich geprüft wurden, weiß ich nicht genau, müssen aber über 15 gewesen sein.
Also unterschiedliche Devices oder Android Versionen.
Am liebsten hätte ich die Variante von "bra" verwendet, da jfList immer die korrekte Anzahl an wirklich angeschlossenen Speicherkarten oder Sticks anzeigt. Sogar bei Android 4.
Also USB Stick anstöpseln und zack: ein Eintag mehr.
Allerdings liefert sPathStorageState stets "unknown".
Ich habe letztendlich zwei verschiedene Funktionen verwendet und die Ergebnisse in eine eindeutige Liste geschrieben.
1) FlyFilesUtils.GetExternalStoragePath // von wang80919qq link siehe ersten post
2) system.IOUtils.TDirectory.GetDirectories ('/storage/');
Zur Verbesserung sollte man noch den freien Speicher prüfen, da oft USBDriveA-USBDriveF aufgelistet werden, auch wenn kein oder nur ein Stick angeschlossen ist.
Falls es was besseres gibt, bitte melden!
hier die Funktion:
Code:
function InitCacheCombobox: boolean;
var
cFunctionname: string;
cPath, cExtern, cIntern, cMsg, cName, cFileINIExt: string;
i: longInt;
sr: TSearchRec;
lList: System.Types.TStringDynArray;
LSearchOption: TSearchOption;
begin
cFunctionname := unit_name + 'InitCacheCombobox';
result := FALSE;
try
try
haupt_util.AddDebugInfo ( '*** Laufwerksabfragen: ***' );
{$IFDEF ANDROID}
cPath := FlyFilesUtils.GetExternalStoragePath;
cMsg := Format('GetExternalStoragePath: %s free Diskspace: %d Byte davon frei: %d Byte', [cPath, FlyFilesUtils.GetTotalSpaceSize(cPath), GetFreeSpaceSize(cPath)]);
haupt_util.AddDebugInfo (cMsg);
Add2CacheCombobox (cPath);
////////////////////////////////////////////////////////////////////////////////
LSearchOption := TSearchOption.soAllDirectories;
lList := system.IOUtils.TDirectory.GetDirectories ('/storage/');
for i := 0 to pred(length(lList)) do begin
cPath := lList[i];
haupt_util.AddDebugInfo ('GetDirectories(1): '+inttostr(i)+') '+cPath);
Add2CacheCombobox (cPath);
end;
////////////////////////////////////////////////////////////////////////////////
{$endif}
haupt_util.AddDebugInfo ( '*** Laufwerksabfragen Ende ***' );
except
on E:
Exception do begin
haupt_util.WriteExceptionLog ( E, cFunctionname );
end;
end;
finally
end;
end;