Delphi > Mobilní vývoj
...Delphi 11; Android; open PDF;
bullhead:
Ahoj,
blbý dotaz, už jsem prošel X odkazů na netu a nedaří se mi vyřeší takovou pitomost (nejsem primárně mobilní vývojář) už tak dlouho, že to zkusím tady. A řeší to X lidi. Otevření PDF na Androidi apce v Delphi 11.
Soubor by měl existovat (už jsem se vykašlal na všechny příklady z netu ty nejedou, prostě FileExist na natvrdo cestu "/storage/emulated/0/Download/sample.pdf" je true:-)). Ale jako by neměl práva na ten soubory - otevření v jákekoliv apce failed nebo unable to load. Mám v delphi nastaveno read external storage a v release manifestu vidim
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...mám v Options v Entitlement listu nastaveno Secure File Sharing na TRUE. A nic. FileExist true, ale soubor není ke čtení. Jestli chápu, může to souviset z runtime permissions, ale když předtím zavolám toto:
https://stackoverflow.com/questions/72047837/there-is-no-overloaded-version-of-requestpermissions-that-can-be-called-with-t
...tak GRANTED
Nenapadá někoho něco?
díky za případné info
B.
bullhead:
...mně střelí ...tak jsem to "vyřešil" ...metodou pokus omyl jsem se dostal, že když v release manifestu stáhnu target na 29 (=Android 10) TAK TO JEDE ...od 30 výšene ne (defa tam bylo 32 = Android 13)
...takže omlouvám se, že otravuji, ale měním dotaz:-) ...jak se to řeší v Androidu 11 (target 30) a výše (už mám dokonce dvě zařízení se 13tkou, to by měla být 32ka)?
ještě jednou děkuji za případné info
B.
bullhead:
...eee defa tam bylo 32, což je Android 12 (a dokonce jsem to tam napsal 2x) ...už je pozdě ...raději zhrnu:
Jede:
API level 29 = Android 10
Nejede:
API level 30 = Android 11
API level 31 & API level 32 = Android 12
API level 33 = Android 13
...a vzhledem k tomu, že od Srpna 2023 je povinost pro store targetovat na API level 33 (a během letošního roku se vyrojí X updatů na 14tku, kdoví, jestli to nezvednou), tak to stejně asi budu muset pořešit:-( ...takže kdyby někdo věděl, co je třeba pro API level 30 a výše
děkuji
B.
Radek Červinka:
--- Kód: ---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;
--- Konec kódu ---
a na vhodne místo ShowAllFilesAccessPermissionSettings
v manifestu musíš mít MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
Radek Červinka:
Jde o to, že od Android 11 do Android 12 se to dalo přerazit tím android:requestLegacyExternalStorage="false" v manifestu, ale v Android 13 uz to nelze.
Takže budto zmenis misto ulozeni (nekdy se to da ofejkovat ze to PDF budes ukladat tam kde je hudba, a tam se da nastavit nejake pravo, neco jak MEDIA), nebo zapnes ALL FILES ACCESS jak jsem jsem ukazal v kodu. Je to vypujcene z Kastri knihovny, ktera je na githubu.
Uz se nejakou dobu chystam, že to napíší na delphi.cz , ale znas to :-)
Navigace
[0] Seznam témat
[#] Další strana
Přejít na plnou verzi