Delphi > Mobilní vývoj

...Delphi 11; Android; open PDF;

(1/3) > >>

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