Italian Aggiornamento vecchia app

AlpVir

Well-Known Member
Licensed User
Longtime User
Sono alle prese con l'aggiornamento di una mia vecchia app che aveva un punto centrale: la possibilità di scrivere (e leggere) files residenti in File.DirRootExternal.
Voglio conservare questa caratteristica, ma le nuove versioni di Android e i nuovi vincoli di Google Play rendono questo compito assai difficile.
Il semplicissimo progetto allegato viene correttamente compilato ma all'atto dell'installazione appare un minaccioso "protetto da Google Play". E' evidente che un progetto di questo tipo sarebbe rifiutato.
A maggior ragione se nel file manifest specifico (invece targetSdkVersion="22" com'è adesso) targetSdkVersion="33" (come è richiesto attualmente e come B4A propone di default) la compilazione non ha successo.
I punti dolenti sono sicuramente nel file manifest e, forse, nel codice (in Activity_Create probabilmente).
Un punto per me strano è rappresentato da questo fatto: se, come sembra, non posso scrivere in File.DirRootExternal perchè allora sono in grado di creare la cartella GlobalCartellaApp e non ANCHE la sottocartella GlobalCartellaQuestaApp (per non dire scrivere nel file NomeFileINI ?
Qualcuno che ha affrontato questi stessi problemi è in grado di dare un'occhiata al progettino allegato e suggerirmi una soluzione ?
Inutile dire che ho cercato a lungo nei vari post di questo sito e non ho trovato risposte (o per lo meno non le ho sapute interpretare ed applicare).
Grazie per l'attenzione.
 

Attachments

  • alpvir.provaFileINI.zip
    10 KB · Views: 56

LucaMs

Expert
Licensed User
Longtime User
A maggior ragione se nel file manifest specifico (invece targetSdkVersion="22" com'è adesso) targetSdkVersion="33" (come è richiesto attualmente e come B4A propone di default) la compilazione non ha successo.
Perché sul PC devi avere l'sdk 33 (usa l'SDK Manager, dal menu Tool)

1672843938078.png
 

LucaMs

Expert
Licensed User
Longtime User
Un punto per me strano è rappresentato da questo fatto: se, come sembra, non posso scrivere in File.DirRootExternal perchè allora sono in grado di creare la cartella GlobalCartellaApp e non ANCHE la sottocartella GlobalCartellaQuestaApp (per non dire scrivere nel file NomeFileINI ?
Probabilmente è sbagliato il comando che crea la sottocartella, ma non dovresti usare File.DirRootExternal, dovresti usare rp.GetSafeDirDefaultExternal (rp è un'istanza di RuntimePermissions).
Suppongo che, per tue necessità, tu non possa scrivere il tuo file ini nella File.DirInternal, che sarebbe il posto giusto per ogni file esterno aggiuntivo.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Grazie delle info.
Tuttavia desidererei poter scrivere in File.DirRootExternal perchè quella cartella la so aprire con utility tipo TotalCommander e leggerne direttamente il contenuto (sia che siano immagini o file di testo o database sqlite o altro; ciò a scopo di controllo e/o di eventuali interazioni con altre app).
Il comando che crea la sottocartella penso che sia giusto; difatti il progettino allegato funziona, crea la sottocartella e scrive il file di testo. Ma con sdk 22 !!!
E l'sdk<31 è rifiutato da Google Play.
Sul PC ho C:\Android\platforms\android-33
EDIT: Ora provo quanto mia hai allegato.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Come ho scritto avrei la necessità di scrivere proprio in quella sottocartella.
Non mi sembra difatti di aver alcun controllo esterno su quanto scrivo in /storage/emulated/0/Android/data/b4a.example/files come da te proposto.
Il tuo progettino funziona ma, ripeto, non scrive in quella sottocartella.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Ho installato l'app come da te modificata. Funziona (il msgbox propone il conteuto nel file INI) ma non scrive nella cartella da me desiderata.
Quindi il problema permane.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Riepilogo:
- con sdk=22 l'app (nella mia versione) crea le 2 cartelle e scrive nel file INI, sia pure dopo la minaccia di Google
- con sdk=33 (o 30) l'app (nella mia versione) non funziona; crea una sola cartella e NON la seconda; nè scrive nel file INI
- con sdk=33 l'app (nella tua versione) funziona; ma NON SCRIVE NELLA CARTELLA DESIDERATA.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
La cartella desiderata è File.DirRootExternal & "/" & GlobalCartellaApp & "/" & GlobalCartellaQuestaApp & "/"
 

LucaMs

Expert
Licensed User
Longtime User
Riepilogo:
- con sdk=22 l'app (nella mia versione) crea le 2 cartelle e scrive nel file INI, sia pure dopo la minaccia di Google
- con sdk=33 (o 30) l'app (nella mia versione) non funziona; crea una sola cartella e NON la seconda; nè scrive nel file INI
- con sdk=33 l'app (nella tua versione) funziona; ma NON SCRIVE NELLA CARTELLA DESIDERATA.
Boh, io non posso fare prove per accedere dall'esterno, perché da una vita non ho la possibilità di connettere lo smartphone tramite USB (quindi uso solo il Bridge; prima a poi ci riproverò ma senza molta speranza).

Tu, col progetto che ho allegato e da "fuori", vedi tutto il percorso creato, ovvero la tua cartella e la sottocartella?
 

LucaMs

Expert
Licensed User
Longtime User
Ho guardato di nuovo il progetto.
Il problema potrebbe essere nella creazione del file ini, in quanto come nome del file hai dato un percorso+nome.
Alla variabile dai, invece, solo il nome del file e quando crei un percorso usa File.Combine, anziché unire stringhe con & "/".
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Grazie del supporto.
Da "fuori" non vedo nè la cartella, nè la sottocartella nè il file.
Li vedo solo all'interno della tua app ed che il fondato sospetto che i 3 elementi prima citati siano lì nel mio smartphone e sia pressochè impossibile cancellarli (se con con la tua stessa app, con un opportuno codice).
P.S.: Non ho capito l'impossibilà di connette lo smartphone tramite USB nè hocapito il legame con quanto stiamo discutendo qui.
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Il problema potrebbe essere nella creazione del file ini, in quanto come nome del file hai dato un percorso+nome.
Alla variabile dai, invece, solo il nome del file e quando crei un percorso usa File.Combine, anziché unire stringhe con & "/".

No, perchè allora non si spiegherebbe il fatto che non viene creata la sottocartella.
Il problema, secondo me, sta nel fatto che le nuove versioni di Android NON consentono di scrivere in di fuori di certe zone.
 

LucaMs

Expert
Licensed User
Longtime User
Malgrado l'ora, dovrei... pranzare.

Se non risolvi col suggerimento principale (usare sempre File.Combine anziché la congiunzione di stringhe e dare alla variabile NomeFileIni solo il valore del nome del file, non di un percorso), darò una seconda occhiata (ma temo che dovrò scaricare l'sdk 33 ed anche aggiornare B4A)
 
Top