Android 13 a práce se soubory

vložil Radek Červinka 24. ledna 2024 19:30

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.

Tagy:

FireMonkey | Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců