Italian Manifest

zamb

Active Member
Licensed User
Carissimi, per la prima volta mi scontro con il file manifest.

Per quanto abbia cercato di capire mi sembra abbastanza complicato.

Io dovrei accedere in scrittura e lettura alla DirInternal e alla DirAssets nonchè, in scrittura, alla DirExternal. In ogni caso vorrei poter generare subfolders.

Qualche anima pia mi potrebbe indicare il codice da inserire nel manifest?

Come sempre vi ringrazio in anticipo e pendo dalle vostre labbra :)

Zamb
 

GIS

Active Member
Licensed User
Ciao, vediamo se mi ricordo. In merito alla DirInternal non ci sono problemi. Puoi fare tutto quello che vuoi senza dichiarare niente nel manifest.
Mentre per DirExternal da android 6+ devi dichiarare nel manifest:
B4X:
AddManifestText(<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />)
Cmq DirExternal non è la memoria esterna, per intenderci la memoria SD. Per DirAssets non saprei.
Spero di essermi ricordato tutto bene.

Volevo anche precisare che per opinione comune sarebbe bene usare sempre DirInternal. Perchè tutto quello che metti in DirInternal l'utilizzatore del dispositivo non ci può accedere. Cosa diversa con DirExternal l'utente ci può accedere e per errore cancellare i file o addirittura la cartella.
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Per accedere in lettura/scrittura alla DirInternal non devi fare nulla, il sistema operativo ti consente di farlo senza problemi.
Per la DirAssets sinceramente non ho esperienza, ma di sicuro ci puoi accedere solo in lettura, dato che praticamente sono i files all'interno della tua applicazione, e non ne puoi mettere di nuovi.
Per la DirExternal devi chiedere l'autorizzazione all'utente, guardati questo: https://www.b4x.com/android/forum/threads/runtime-permissions-android-6-0-permissions.67689/#content

Sergio
 

zamb

Active Member
Licensed User
Grazie infinite. Debbo accedere alla DirExternal per mettere i file che genero e che l'utente deve poter vedere.

Dimenticavo: debbo anche ottenere l'accesso alla camera. Per questo è previsto un codice?
 

zamb

Active Member
Licensed User
Quindi se ho ben capito, posso chiedere i permessi in runtime senza modificare il manifest?

Ma così facendo chiedo le autorizzazioni ad ogni esecuzione o sono memorizzate da qualche parte?

Mi resta anche l'interrogativo per la camera..

Grazie ancora!!!
 

Sagenut

Well-Known Member
Licensed User
I permessi vanno dichiarati nel Manifest e poi vanno anche richiesti a codice.
Una volta che l'utente ha dato i permessi non vedrà più richieste........ Se non gli viene in mente di revocarli.
 

udg

Expert
Licensed User
Per semplificare, in Manifest dichiari i permessi che l'app richiede mentre nel codice effettui la richiesta runtime all'utente.
Una volta concesso il permesso questo viene rgeistrato da Android e quindi se l'utemte non lo revoca (Settings/Applicazioni..) non verrà chiesto nuovamente. Hai anche una funzione che eseguirebbe un semplice check, ma ha più senso in un service ed in casi particolari; in genere se ne sconsiglia l'uso.

Per la CAMERA ti comporti allo stesso modo che per la DirExternal

Non ricordo in quale thread, ma trovi facilmente anche del codice che chiede tutti permessi necessari, uno dietro l'atro, così poi decidi se chiudere l'app o proseguire con funzionalità limitate o funzionamento diverso
 

Sagenut

Well-Known Member
Licensed User
Dovresti usare sempre il comando CheckandRequest per richiedere i permessi prima di ogni azione che li preveda.
In questo modo verranno richiesti se non sono stati dati e non succederà nulla se sono stati concessi in precedenza.
 

udg

Expert
Licensed User
Ancora due brevi note così risparmi tempo in eventuali ricerche.

Nel Manifest suggerito da GIS (post #2) usa 19 invece che 18 perchè ci sono stati casi di device che non rispettavano correttamente il primo limite.
Some Android 4.4 (API 19) devices do not allow access to RuntimePermissions.GetSafeDirDefaultExternal without explicit permission although they should. It it therefore recommended to set android:maxSdkVersion to 19 in the version based permission. It was previously set to 18.

Questo è un esempio di codice per richiedere più permessi (in una Activity) in sequenza. Qui si è scelto di terminare il programma se anche uno solo dei permessi non è concesso, ma come detto puoi gestire i risultati tramite variabile globale per decidere come proseguire.
Nota: non usare questo codice in Activity_Resume!

B4X:
For Each permission As String In Array(rp.PERMISSION_READ_CONTACTS, rp.PERMISSION_READ_CALL_LOG, rp.PERMISSION_CALL_PHONE)
       rp.CheckAndRequest(permission)
       Wait For Activity_PermissionResult (permission As String, Result As Boolean)
       If Result = False Then
           ToastMessageShow("No permission!", True)
           Activity.Finish
           Return
       End If
   Next
   'we have permission!
 

LucaMs

Expert
Licensed User
Alla rinfusa, senza aver letto tutto alla perfezione, scusate (ma ho letto tutto, seppur velocemente!)

1) La DirAssets è sempre e solo in lettura, non è possibile scriverci;
2) (e qui... magari salterete sulla sedia...) la DirExternal... non esiste! Esistono la DirDefaultExternal e la DirRootExternal.

E sono già stanco :p


P.S. Dimenticavo: non impostare il targetSdkVersion ad un valore inferiore a 26, il market non lo accetterebbe.
 
Top