Italian [ solved ] B4A android 10 target 29 non si riesce ad accedere alla cartella esterna download help

Xfood

Well-Known Member
Licensed User
Buon Pomeriggio a tutti
non riesco ad accedere alla cartella download su androi 10 con target 29, faccio notare che per pubblicare un'app su googleplay
bisogna mettere per forza api 29, come da comunicazione google che allego,
allego anche il codice con cui cerco di creare una cartella su download, da notare che con
api 28 quindo solo modificando il manifest in api 28 tutto funziona,
qualcuno ha qualche idea?
Grazie mille a tutti

B4X:
If Not(File.Exists(File.DirRootExternal, "Download/Lista_Bc")) Then
        'Msgbox(File.DirRootExternal,"dir non creata")
        File.MakeDir(File.DirRootExternal, "/Download/Lista_Bc")
    End If
' richiesta permessi ok'
For Each permission As String In Array(rp.PERMISSION_READ_EXTERNAL_STORAGE,rp.PERMISSION_CAMERA,rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
        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
    


'manifest'
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />



' testo di goggle se si tenta di utilizzare un apk con api target minore di 29

L'attuale livello API target della tua app è 28, ma il livello API target minimo deve essere 29 per garantire che l'app sia basata sulle API più recenti ottimizzate in termini di sicurezza e buone prestazioni.

A partire dal mese di agosto del 2020, le nuove app devono avere come target minimo la versione di Android 10 (livello API 29).
A partire dal mese di novembre del 2020, gli aggiornamenti delle app devono avere come target almeno la versione Android 10 (livello API 29).
 

oparra

Well-Known Member
Licensed User
??

29 - No permission to access File.DirRootExternal, even with the STORAGE permission. For now there is a simple workaround:
B4X:

SetApplicationAttribute(android:requestLegacyExternalStorage, true)
Note that you need to reference android.jar from android-29 folder.
It will not work with targetSdkVersion=30. Avoid using File.DirRootExternal. Either use File.DirInternal or RuntimePermissions.GetSafeDirDefaultExternal.
 

oparra

Well-Known Member
Licensed User
See:

sdk manager API 29 (download)

1598016284173.png
 

Xfood

Well-Known Member
Licensed User
later as soon as I return I try, I think the 29 is installed on my pc
 

Alessandro71

Active Member
Licensed User
non puoi più accedere ai files in quella maniera con SDK 29
devi fare selezionare il file all'utente con ContentChooser
 

Xfood

Well-Known Member
Licensed User
non puoi più accedere ai files in quella maniera con SDK 29
devi fare selezionare il file all'utente con ContentChooser
In realta' io dovrei creare una cartella sotto download, e poi esportare dei dati dalla mia app, nella cartella download/lista_bc,
non e' piu possibile farlo?
Dovrei creare una cartella su dirinternal, creare il file e poi usare ContentChooser?

😭😭😭😭😭😭😭
 

LucaMs

Expert
Licensed User
L'utente, usando ContentChooser, non vedrebbe quei file i file nella DirInternal. (uhm... veramente mi sta venendo il dubbio che non sia così; gli utenti di altre app che usino ContentChooser sicuramente non vedranno i file della tua app nella DirInternal, l'utente della tua app potrebbe, forse).

E' giusta la risposta di @oparra, post #2
 

Xfood

Well-Known Member
Licensed User
Io volevo accedere alla cartella
File.DirRootExternal,
Quindi non posso accedere ne alla
File.DirRootExternal, e neanche a dirinternal?
Questa sera faccio una prova con android.jar ver.29
E speriamo che vada.😭😭😭😭
 

Xfood

Well-Known Member
Licensed User
Purtroppo sono fuori ufficio, questa sera provo, e poi ti faccio sapere.
Grazie mille.
P.s. conviene provare con api 29 android.jar?
 

LucaMs

Expert
Licensed User
Purtroppo sono fuori ufficio, questa sera provo, e poi ti faccio sapere.
Grazie mille.
P.s. conviene provare con api 29 android.jar?
Se vuoi pubblicare l'app sullo store, devi usare l'API 29, valori inferiori non verranno accettati (da... agosto, mi sembra).

NB: che siamo in agosto lo so, eh. Come minimo me ne accorgo dal caldo che fa 😄
 

Xfood

Well-Known Member
Licensed User
Si, ma basta mettere 29 nel file manifest, non obbligatorio compilare con framework 29.
Ho pubblicato una piccola app con il 28, ma nel manifest messo 29


<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="29"/>
 

Xfood

Well-Known Member
Licensed User
Non so perché non ho aggiornato/pubblicato, in questo mese.

Ovviamente se l'app dovesse sfruttare funzionalità della 29 dovrai per forza compilare con questa.

Cmq, per tagliare la testa al toro (poraccio) compila sempre con la 29.
Che non me ne voglia a male la mucca..😁😁😁😁
 

LucaMs

Expert
Licensed User
Che non me ne voglia a male la mucca..😁😁😁😁
Te ne vorrebbe solo se al toro tu tagliassi altro, della testa non le interessa granché 😄


1598022030030.png


Quindi, dal 3 agosto scorso, solo le nuove app devono avere come target il 29 nel manifest. Dal 2 Novembre (proprio questa data dovevano scegliere?) anche gli aggiornamenti di app già pubblicate dovranno averlo.
 

Xfood

Well-Known Member
Licensed User
Grazie @LucaMs , @Alessandro71 , @oparra
Funziona Alla Grande.
agginto nel manifest ( come consigliato da @LucaMs )
SetApplicationAttribute(android:requestLegacyExternalStorage, true)
e poi prima di lanciare la generazione del mio file
Dim MainDir As String = rp.GetSafeDirDefaultExternal("Download/Lista_Bc")
e adesso non ho piu nessun errore
Grazie a tutti
 
Top