Italian Problema con Android 9 e 10

AlpVir

Well-Known Member
Licensed User
Longtime User
Ho dato una rinfrescata ad una mia app del 2017 (WebCamAlpVir & Nivometri & Meteo, pubblicata da lungo tempo su Google Play) ma mi viene segnalato da 3 potenziali utilizzatori che il database dbWebCamAlpVir2.sqlite su cui si basa l'intera app "NON ESISTE" !!!
In realtà il file esiste eccome. E credo di aver settato correttamente i permessi con la libreria runtimepermission. Tant'è vero che l'app si installa correttamente su Android 8.1, dopo aver acconsentito ad :
1) accedere a foto, contenuti multimediali, ecc.;
2) accedere alla posizione;
3) accedere ai contatti.
Appare la videata allegata e, premendo il tasto download, avviene lo scaricamento del file sopra citato.
Tutto questo straverificato personalmente con - ripeto - Android 8.1: Non succede viceversa con Android 9 (come segnalato da 2 potenziali utilizzatori e come da me verificato con Genymotion) e con Android 10 (come mi viene segnalato da un amico).
Come potrei fare per rendere l'app "digeribile" anche da versioni di Android superiori alla 8 ?
Preciso che targetSdkVersion="29", uso B4A vers. 9.5 e C:\Android\platforms\android-29\android.jar.
Non mi sembra che in "B4A SDK Manager" ci sia qualcosa che faccia riferimento ad un ipotetico Sdk versione 30. Mi manca qualcosa ?
Grazie per l'attenzione
 

Attachments

  • NonEsiste.jpg
    NonEsiste.jpg
    41 KB · Views: 121

AlpVir

Well-Known Member
Licensed User
Longtime User
A seguito di suggerimento di Erel trovato nel forum
""
It is a mistake to set targetSdkVersion to 29 for now.
Accessing File.DirRootExternal will be more complicated and limited in the future.
""
ho provato con targetSdkVersion="28" e C:\Android\platforms\android-28\android.jar nell'emulatore Genymotion.
Risultato negativo.
Il problema potrebbe ricondursi a qualche libreria, ma in tal caso quale ?
Ad esempio la precedente versione di questa stessa app utilizzava SQLCipher ma son dovuto passare a SQL "normale" perchè, a quando ho capito ed ho riscontrato sul campo, SQLCipher cozzava con le app a 64 bit (e non chiedetemi cosa significa).
 
Last edited:

Sagenut

Well-Known Member
Licensed User
Longtime User
Ho provato la tua app e crasha subito dopo aver chiesto dei permessi.
In quale Sub vengono richiesti i permessi?
Servono tutti e subito per far funzionare l'app?
Le indicazioni generali sono di non chiederli in Activity_Create e Resume, inoltre se possibile sarebbe meglio chiederli di volta in volta giusto prima della funzione che ha necessità di quel permesso.
Eventualmente posta il codice di richiesta dei permessi per vedere come è fatta e cosa c'è subito dopo le richieste che può generare il crash.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
A me non risulta che l'app crasha bensì premendo il pulsante DOWNLOAD viene segnalato che il file non esiste.
Con quale versione di Android l'hai provata ?
Qui sotto riporto il codice di Activity_Create e preciso che la sub Crea si occupa di tutto quello che, usualmente, si mette in Activity_Create (inizializzazione variabili, pulsanti, ecc. ecc.)
Da questo si capisce che non ho seguito le tue indicazioni di dove mettere il codice relativo ai permessi, ma con Android 8.1 tutto è OK.
Su mio suggerimento un utilizzatore della mia app, non riuscendo a fare il download del database, lo ha scaricato dal mio sito (come del resto fa l'app stessa) e poi lo ha copiato manualmente nell'apposita cartella. Ed è andato tutto bene.

B4X:
Sub Activity_Create(FirstTime As Boolean)
    GlobalVariazioniDB=False
    rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
    Wait For Activity_PermissionResult (Permission As String, Result1 As Boolean)
    If Result1 = False Then
        LogColor ("no PERMISSION_WRITE_EXTERNAL_STORAGE",Colors.red)
        Msgbox ("L'app deve poter scrivere i risultati intermedi sul device.","INSTALLAZIONE INTERROTTA")
        ExitApplication
        Return
    Else
        Log("si PERMISSION_WRITE_EXTERNAL_STORAGE")
        rp.CheckAndRequest(rp.PERMISSION_ACCESS_COARSE_LOCATION)
        Wait For Activity_PermissionResult (Permission As String, Result2 As Boolean)
        If Result2=False Then
               LogColor ("no PERMISSION_ACCESS_COARSE_LOCATION",Colors.red)
            Msgbox ("L'app deve poter conoscere la posizione del device.","INSTALLAZIONE INTERROTTA")
            ExitApplication
        Else
            Log ("si PERMISSION_ACCESS_COARSE_LOCATION")
            rp.CheckAndRequest(rp.PERMISSION_ACCESS_COARSE_LOCATION)
            Wait For Activity_PermissionResult (Permission As String, Result3 As Boolean)
            If Result3=False Then
                   LogColor ("no PERMISSION_ACCESS_FINE_LOCATION",Colors.red)
                Msgbox ("L'app deve poter conoscere la posizione del device.","INSTALLAZIONE INTERROTTA")
                ExitApplication
            Else
                Log ("si PERMISSION_ACCESS_FINE_LOCATION")
                rp.CheckAndRequest(rp.PERMISSION_GET_ACCOUNTS)
                Wait For Activity_PermissionResult (Permission As String, Result4 As Boolean)
                If Result4=False Then
                       LogColor ("no PERMISSION_GET_ACCOUNTS",Colors.red)
                    LogColor ("no PERMISSION_ACCESS_FINE_LOCATION",Colors.red)
                    Msgbox ("L'app deve poter conoscere la posizione del device.","INSTALLAZIONE INTERROTTA")
                    ExitApplication
                Else
                    Log ("si PERMISSION_GET_ACCOUNTS")
                    rp.CheckAndRequest(rp.PERMISSION_READ_CONTACTS)    
                    Wait For Activity_PermissionResult (Permission As String, Result5 As Boolean)
                    If Result5=False Then
                           LogColor ("no PERMISSION_READ_CONTACTS",Colors.red)
                           Msgbox ("L'app deve poter conoscere l'account principale.","INSTALLAZIONE INTERROTTA")
                        ExitApplication
                    Else
                        Log("si PERMISSION_READ_CONTACTS")
                           Crea(FirstTime)
                    End If    
                End If    
            End If  
        End If
    End If
End Sub

Sub Crea(FirstTime As Boolean)
    Dim cols1(2)             As Int
    cols1(1) = Colors.argb ( 80, 0, 0, 0) :        'gd1.Initialize("TOP_BOTTOM",cols1)
    cdblu.Initialize(Colors.blue,7dip) :    cols1(0) = Colors.argb ( 80, 136, 136, 136) 
    cdverde.Initialize(Verde,7dip) :    cols1(0) = Colors.argb ( 80, 136, 136, 136)  
    Marrone=Colors.RGB(132,33,33)
    Verde=Colors.RGB(10,124,10)
    GiaAbilitatoPulsanti=False
ecc. ecc.
 

Sagenut

Well-Known Member
Licensed User
Longtime User
Ora non sono a casa e non riesco a guardarci.
Ho provato con Android 10.
Appena dato 3 consensi l'app si chiudeva senza avvisi.
Facendola ripartire il sistema mi informava che l'app continua a crashare.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
In effetti sono 3 i messaggi di permessi da dare.
Con Android 9 non sembra che si chiuda così malamente. Appare ancora la videata con un invito a premere il pulsante di DOWNLOAD (vedi - più o meno l- 'immmagine allegata all'altro post)
 

Star-Dust

Expert
Licensed User
Tieni conto che sarà consentito nel futuro accedere alla rubrica dei contatti (credo da SDK 29) in ogni caso devi richiedere i permessi anche nel manifest, e cosi per accedere a un indirizzo non ssl , come sembra nel tuo caso, bisogna specificarlo nel manifest (vedi qui) da Android 9.

Le richieste di permessi meglio farlo in Activity_Resume e per i permessi multipli vedi qui
 
Last edited:

AlpVir

Well-Known Member
Licensed User
Longtime User
E' stato sufficiente inserire
B4X:
CreateResourceFromFile(Macro, Core.NetworkClearText)
nel file manifest perchè l'app funzionasse correttamente con l'emulatore Genymotion settato su Android 9.
Prima di tale piccola ma sostanziale modifica l'app non funzionava.
Adesso indago se questo accade anche su dispositivi reali.
Poi devo cercare qualche emulatore per Android 10 e provare.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Mi viene segnalato da un utilizzatore che ha Android 10 che l'app si installa e funziona, al contrario di prima.
Resta il mistero del perchè su Google Play, l'app viene indicata come "WebCam & Nivometri & Meteo (beta)"
E' quel "beta" che non quadra. Vero è che 2 anni fa era in versione beta ma ultimamente ho sempre pubblicato cliccando su un pulsante che faceva riferimento alla versione di produzione; produzione, me lo ricordo bene.
Come fare ad eliminare quel "Beta" ?
Ringrazio ancora @Star-Dust che mi ha fornito la dritta decisiva.
 
Top