Delphi.cz

Český portál Delphi

Android 13 a práce se soubory

S příchodem Androidu 11 google zpřísnil přístup k souborům, které nejsou přímo vaše, ale jsou sdílené (třeba na SD kartě atd). Do verze Android 12 to šlo potlačit přes manifest a requestLegacyExternalStorage, ale s příchodem Androidu 13 se situace změnila.

Google tlačí nový způsob práce se soubory, kterému se teď nebudu věnovat, ale pokud chcete používat původní přístup, lze vynutit jeho použítí. Jedná se o právo MANAGE_APP_ALL_FILES_ACCESS_PERMISSION . Tuto možnost lze zapnout jak z nastavení Androidu (je to trochu schované, ale třeba na videu s nastavením je to celkem pochopitelné pokud o tom něco tušíte).

Samozřejmě to lze vyvolat i z kódu a pro publikování ve Store je to nutnost (kód byl dříve převzat z knihovny Kastri, na kterou jsem již několikrát odkazoval a autorem je Dave Nottage)

class function TMainForm.NeedsAllFilesAccessPermission: Boolean;
begin
{$IFDEF WIN32}
  Result := False;
{$ELSE}
  Result := TOSVersion.Check(11) and not TJEnvironment.JavaClass.isExternalStorageManager;
{$ENDIF}
end;

class function TMainForm.ShowAllFilesAccessPermissionSettings: Boolean;
{$IFDEF ANDROID}
var
  LIntent: JIntent;
  LUri: Jnet_Uri;
  LAction: JString;
begin
  Result := False;
  if NeedsAllFilesAccessPermission then
  begin
    LUri := TJnet_Uri.JavaClass.fromParts(StringToJString('package'), TAndroidHelper.Context.getPackageName, nil);
    LAction := StringToJString('android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION');
    LIntent := TJIntent.JavaClass.init(LAction, LUri);
    TAndroidHelper.Context.startActivity(LIntent);
    Result := True;
  end;
{$ELSE}
begin
{$ENDIF}

end;

Po nastavení v manifestu (resp. v options projektu) ALL_FILES_ACCESS_PERMISSION a zavoláním ShowAllFilesAccessPermissionSettings na vhodném místě by se měl dát používat přístup k souborům jako ve starších verzí.

Sranda je, že pokud máte Android 12 a v něm nainstalovanou aplikaci, tak google při aktualizaci na Android 13 tiše povolí tuto možnost a vše funguje jako dříve. Ale čistá instalace nefunguje a vy se nechápete, proč to jinde na Android 13 funguje.

Datum: 2024-01-24 18:30:00 Tagy: Android

FireMonkey Praxe