Italian [B4A] SdkVersion="30" Problemi coi permessi di scrittura/lettura

Luigi S

Active Member
Licensed User
Buonasera a tutti, volevo aggiornare un'app ma ho trovato un sacco di novità.
Quello che non riesco a capire è come poter procedere con le nuove versioni api (da 30 in su) per leggere e scrivere su DirDefaultExternal e DirRootExternal.
Questo pomeriggio ho letto un sacco di post ma le soluzioni proposte non mi sono chiare.

Praticamente ora faccio cosi:
- copio da DirInternal quello che mi serve e lo metto su DirDefaultExternal
- su DirDefaultExternal creo il file zip e lo metto su DirRootExternal cosi sta in bella vista e se richiesto lo invio a googledrive/altro
- elimino tutto quello che rimane su DirDefaultExternal
il tutto scegliendo tra due pulsanti, backup locale o esterno.

Potrei usare DirInternal per creare il zip, ma lo vorrei comunque mettere da qualche parte ben visibile da pc o si è costretti ad inviarlo a googledrive/altro?

Consigli?
 
Last edited:

hatzisn

Expert
Licensed User
Longtime User
Da alcuni versioni di API non puoi accedere il DirDefaultExternal o DirRootExternal. Devi usare le permessi runtime e usare la RuntimePermissions.GetSafeDirDefaultExternal("") per salvare il tuo file alla cartella dedicata a tua app. La situazione é peggiorata con le versioni di api 30 e su. Non puoi più accedere cartelle di altre app. Quello che devi fare è solamente usare l'api per upload il tuo file direttamente da RuntimePermissions.GetSafeDirDefaultExternal("") a Google drive, Dropbox etc. Usando RuntimePermissions.GetSafeDirDefaultExternal("") il file è in bella vista anche da PC nella cartella /android/data/{your_app_package_name}/Files con USB.

RuntimePermissions:
Dim rp As RuntimePermissions
Dim sFolderToSave as String
sFolderToSave = rp.GetSafeDirDefaultExternal("")

Devi aggiungere anche la libreria RuntimePermissions
 
Last edited:

Luigi S

Active Member
Licensed User
Credo che dovrai passare a questo
https://www.b4x.com/android/forum/t...-folder-list-of-other-related-methods.129897/
Non l'ho usato personalmente quindi non so darti dettagli.
In pratica è l'utente che deve selezionare la posizione dove poter salvare il file, dando così il permesso.
Grazie per il link esplicativo, si ho risolto usando SaveAs per l'esportazione e ContentChooser per l'importazione che tra l'altro già usavo per prelevare delle foto.
Ma a questo punto i rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) che ho li posso anche eliminare?
 

Sagenut

Expert
Licensed User
Longtime User
Grazie per il link esplicativo, si ho risolto usando SaveAs per l'esportazione e ContentChooser per l'importazione che tra l'altro già usavo per prelevare delle foto.
Ma a questo punto i rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) che ho li posso anche eliminare?
Non ho provato personalmente.
Prova a rimuoverlo.
Se funziona, non serve più. ;)
 
Top