Italian I maledetti permessi

AlpVir

Well-Known Member
Licensed User
Longtime User
Non riesco a concludere questa che dovrebbe essere una semplicissima app il cui unico scopo è quelli di elencare in una ListView i file presenti in una specifica cartella.
Mi da sempre "Permissi negati".
Dove sbaglio (perchè sicuramente sbaglio)
Preciso : Android 13 - Librerie Core e RuntimePermission - SDK 34
Grazie per l'attenzione

#Region Project Attributes
#ApplicationLabel: LISTA FILE PDF
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region



Sub Process_Globals
' Android 13 - Librerie Core e RuntimePermission - SDK 34
' nel manifest c'è :
' AddPermission("android.permission.READ_EXTERNAL_STORAGE")
' AddPermission("android.permission.WRITE_EXTERNAL_STORAGE")
' SetApplicationAttribute(android:requestLegacyExternalStorage, true)
End Sub

Sub Globals
Private folderPath As String = "/storage/emulated/0/Download" ' cartella con permessi RWX
Private rp As RuntimePermissions ' Oggetto per la gestione dei permessi
Private ListView1 As ListView ' Per visualizzare l'elenco dei file PDF
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.Color = Colors.White
Activity.Title = "LISTA FILE PDF"
ListView1.Initialize("ListView1")
Activity.AddView(ListView1, 0, 0, 100%x, 100%y)

' Controllo e richiesta permessi runtime
If rp.Check(rp.PERMISSION_READ_EXTERNAL_STORAGE) = False Then
rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Permission = rp.PERMISSION_READ_EXTERNAL_STORAGE Then
If Result = True Then
Log("Permessi concessi.")
ListPdfFiles
Else
Log("Permessi negati.")
'===================== VIENE VISUALIZZATO QUESTO !!!!! =====
ToastMessageShow("Permesso negato. Non è possibile accedere ai file.", True)
'===========================================================
Return
End If
End If
Else
Log("Permessi già concessi.")
ListPdfFiles
End If
End Sub

Sub Activity_PermissionResult(Permission As String, Result As Boolean)
Log("Permesso gestito: " & Permission & ", Risultato: " & Result)
If Permission = rp.PERMISSION_READ_EXTERNAL_STORAGE Then
If Result = True Then
Log("Permessi concessi. Procedo con l'elenco dei file.")
ListPdfFiles
Else
Log("Permessi negati.")
ToastMessageShow("Permesso negato. Non è possibile accedere ai file.", True)
End If
End If
End Sub

Sub ListPdfFiles
Dim fileList As List
fileList.Initialize
Log("Controllo della cartella: " & folderPath)
If File.IsDirectory(folderPath, "") Then
fileList = File.ListFiles(folderPath)
Log("Numero di file trovati: " & fileList.Size)
For Each fName As String In fileList
If fName.ToLowerCase.EndsWith(".pdf") Then
ListView1.AddSingleLine(fName) ' Aggiungi i file PDF alla lista
Log("File aggiunto: " & fName)
End If
Next
Else
Log("La cartella non esiste o non è accessibile.")
ToastMessageShow("La cartella non è accessibile o non contiene file PDF.", True)
End If
End Sub
 

Sagenut

Expert
Licensed User
Longtime User
L'app devi pubblicarla su Google Play o è ad uso privato?
 

Sagenut

Expert
Licensed User
Longtime User
Se è per uso privato (inteso che la installi con il tuo APK sui device che vuoi) puoi sfruttare questa cosa
https://www.b4x.com/android/forum/t...cess-internal-external-storage-sdk-30.130411/
che ti dà totale accesso a qualunque cartella.
Se invece devi pubblicare sul market è necessario l'intervento dell'utente per indicare la cartella da utilizzare.
Quindi credo ti serva applicare questo
https://www.b4x.com/android/forum/t...-folder-list-of-other-related-methods.129897/
Ti allego il tuo esempio modificato al volo per utilizzare il primo metodo, quello se l'app è privata.
 

Attachments

  • Salute2.zip
    11.5 KB · Views: 12

AlpVir

Well-Known Member
Licensed User
Longtime User
Grazie.
L'app sarà usata esclusivamente da me. Ecco il log :
Service started in the background. Trying to start again in foreground mode.
*** Service (starter) Create ***
** Service (starter) Start **
Service started in foreground mode.
** Activity (main) Create (first time) **
SDK = 33 : Requesting MANAGE_EXTERNAL_STORAGE permission
On Entry MANAGE_EXTERNAL_STORAGE = false
** Activity (main) Resume **
** Service (starter) Destroy (ignored)**
che non da il risultato sperato (ed è molto lento)
Nella cartella ho inserito una ventina di file PDF, 1 sottocartella e 4 file non PDF. Ho inserito una sottocartella perchè da altre parti ho letto che l'istruzione
fileList = File.ListFiles(folderPath)
fornisce il numero della cartelle e non il numero dei files.
Cosa strana la citazione "SDK=33" quanto io ho configurato "android.jar" come "C:\Android\platforms\android-34\android.jar"
 

Sagenut

Expert
Licensed User
Longtime User
L'ho provato e ha funzionato.
All'inizio ti dovrebbe chiedere di abilitare quel permesso.
Io l'ho provato su un emulatore con android 14.
Domani provo con un emulatore 13.
 
Last edited:

Sagenut

Expert
Licensed User
Longtime User
Cosa strana la citazione "SDK=33" quanto io ho configurato "android.jar" come "C:\Android\platforms\android-34\android.jar"
Il tuo dispositivo ha android 13.
Quindi rileva SDK 33.
Il livello con cui compili è indipendente dalla versione di Android del dispositivo.
 
Last edited:
Top