Italian [B4A] Gestione permessi plurimi

Aldo's

Active Member
Licensed User
Nell'app che sto facendo ho bisogno di gestire diversi permessi:
WRITE_EXTERNAL_STORAGE
RECORD_AUDIO
FOREGROUND_SERVICE

I primi due sono "pericolosi" e ho aggiunto nel Manifest:
B4X:
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)
AddPermission(android.permission.RECORD_AUDIO)

Ora devo richiedere i permessi.
Ma qui io mi incastro. Vorrei sapere se esiste un modo per chiedere entrambi i permessi o se devo chiedere uno per volta.
Quale codice devo scrivere? Posso farlo nella Private Sub B4XPage_Created (Root1 As B4XView) della B4XMainPage?
Grazie
 

Sagenut

Expert
Licensed User
Longtime User
https://www.b4x.com/android/forum/threads/handle-multiple-permission-request.94611/post-598788
Sarebbe meglio chiederli nel momento in cui deve essere eseguita per la prima volta l'azione che li richiede.
Magari con un messaggio che spieghi prima il perché richiedi quel permesso per tranquillizzare l'utente.
Se invece li vuoi richiedere tutti subito all'inizio secondo me è meglio creare una sub apposita per farlo, da richiamare alla fine della Create che è meglio che si completi.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
cosa c'è di sbagliato:
ho accodato nel manifest
B4X:
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)

mentre il codice è :
B4X:
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    Dim rp As RuntimePermissions
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Implicit read capability if granted
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    Log($"PERMISSION_WRITE_EXTERNAL_STORAGE = ${Result}"$) ' mi ritorna FALSE
    dim shared as String = rp.GetSafeDirDefaultExternal("test")
    Log(shared)
    File.WriteString(shared, "uno.txt", "ciao")
    'ExitApplication
End Sub
il codice viene eseguito senza errori,
il log mi restituisce:
False nel Log($"PERMISSION_WRITE_EXTERNAL_STORAGE = ${Result}"$)
mentre la shared contiene: /storage/emulated/0/Android/data/b4a.example/files/test

ora spulciando le cartelle (il device è collegato al pc tramite usb) , trovo il percorso, con la cartella "test", ma non il file "uno.txt"
tra l'altro NON c'è nessuna richiesta di permessi da parte dell'app
cosa c'è di sbagliato?

android 13
 

LucaMs

Expert
Licensed User
Longtime User
A meno che non sia indispensabile usare una "memoria esterna", usate la File.DirInternal.

Magari aggiungete al Manifest:
B4X:
SetApplicationAttribute(android:allowBackup, "false")
così una volta disinstallata non rimarrà "roba" locale.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
SetApplicationAttribute(android:allowBackup, "false")
questa non la sapevo
A meno che non sia indispensabile usare una "memoria esterna",
utilizzo SEMPRE File.DirInternal, ma era per capire/comprendere il funzionamento dei permessi di accesso e scrittura su "EXTERNAL_STORAGE";
toc-toc !! c'è permesso?
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Qui e qui ci sono tutte le informazioni relative.
infatti, ho seguito i due link (tantissime volte), ma non sono venuto a capo di nulla :confused:
io ho una età certa !
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
Tra l altro per usare
B4X:
rp.GetSafeDirDefaultExternal("")
non serve richiedere nessun permesso.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
non serve richiedere nessun permesso.
ok, come spiegavo nel mio post, curiosando nelle cartelle del device (collegato al pc tramite usb), esiste un percorso "esterno", con una cartella "test", ma del file uno.txt nessuna traccia
 

giannimaione

Well-Known Member
Licensed User
Longtime User
tutto qui
 

Attachments

  • permessi.zip
    9.3 KB · Views: 26

Sagenut

Expert
Licensed User
Longtime User
Ho provato il tuo esempio e da me riesco a vedere la cartella e il file uno.txt sul pc
 

giannimaione

Well-Known Member
Licensed User
Longtime User
Se sulla SD riesci a vedere la cartella creata, dovresti vedere anche il file.
Provato a fare il log del file? (nome e/o contenuto)?
file.exists mi ritorna true, ma del file nessuna traccia;
poi ho creato un file sqlite tramite codice ... sql.initializze (...... ecc)
ho creato una table ed eseguito insert
e stavolta ... San Gennaro ha fatto il miracolo. Abbiamo sempre bisogno di qualcuno ai piani alti

trasferisco il file sul desktop ed è perfettamente funzionante con browser sqlite

grazie per la vostra pazienza
 

giannimaione

Well-Known Member
Licensed User
Longtime User
non lo vedi tramite l'Explorer del tuo PC
ci sarà un problema da qualche parte (pc o device); ora c'è anche il file testo;
misero me, una vita per l'informatica, ma MOLTE cose non riesco a capirle.
 
Top