Italian Percorso /storage/emulated/0

AlpVir

Well-Known Member
Licensed User
Longtime User
Ho un db in cui ho memorizzato un dato che può avere tre possibili valori.
1) /storage/emulated/0/AlpVirData/MioTaccuino/ImmaginiFoto/2015-2016/CostieraBrocan
2) AlpVirData/MioTaccuino/ImmaginiFoto/2015-2016/CostieraBrocan
3) e:\Nikon_Immagini\2015-2016\CostieraBrocan

Tramite opportuno codice faccio in modo di trasformare la stringa 1 e 3 in 2.
Fin qui tutto OK: l'app accede sempre e comunque alla sottocartella CostieraBrocan che è quello che desidero.

"e:\Nikon_Immagini" è un percorso stile Windows ed è una costante.
Anche "AlpVirData/MioTaccuino/ImmaginiFoto" è una costante.

La domanda è: posso considerare anche "/storage/emulated/0/" una costante per cui il mio codice sarà valido per qualsiasi dispositivo Android ?
Grazie per l'attenzione.
 

gyruss68

Member
Licensed User
Longtime User
Ciao ,
in realtà potrebbe non essere una costante.
Puoi verificare le possibili soluzioni utilizzando l'oggetto file :

B4X:
    log("DirAssets=" & File.DirAssets)
    log("DirDefaultExternal=" & file.DirDefaultExternal)
    log("DirInternal=" & File.DirInternal)
    log("DirInternalCache=" & File.DirInternalCache)
    log("DirRootExternal=" & File.DirRootExternal)
    log("ExternalReadable=" & File.ExternalReadable)
    log("ExternalWritable=" & File.ExternalWritable)
 

LucaMs

Expert
Licensed User
Longtime User
Perché invece di sperare che sia sempre così non usi sempre FileDirRootExternal?

Al limite, se non ti piace, puoi mettere in una variabileFile.DirRootExternal & "/" che considererai una costante, cioè non ne cambierai il valore.
 

valentino s

Active Member
Licensed User
Longtime User
Io credo che la tua costante sicura e' quella che dipende tutta da te. Nel tuo esempio: 2015-2016\CostieraBrocan

In realta' hai gia' dato per costante la parte precedente che non lo e', dipende dal dispositivo e dal s.o. e da come lo gestisci come giustamente ti ha detto @gyruss68

Quindi o te ne freghi perche' il progetto e' troppo complesso (e continui con i search e replace), oppure inizi a gestire il database con la parte veramente costante e lasciare al software, a seconda del sistemo operativo dove ti trovi, di aggiungere il resto del percorso.

Puoi gestire anche la transizione, oppure "pulire" tutto il database, oppure aggiungere un campo per indicare il dispositivo.

Se lo gestisci in questo modo ti trovi immediatamente libero di gestire anche miliardi di dispositivi o gruppi di utenti senza dover ripensare alla struttura ogni volta.

E soprattutto sei flessibile nel poter cambiare cartella in ogni momento.

Poi dipende dalle dimensioni del progetto :).

Comunque no: io non la considererei una costante perche' in ogni momento l'utente potrebbe gradire di scegliere un'altra cartella.

Ciao
 

AlpVir

Well-Known Member
Licensed User
Longtime User
@LucaMs
E' proprio quello che ho fatto io.

B4X:
Dim PercorsoAndroid As String
            PercorsoAndroid =File.DirRootExternal & "/"

@valentino s
Forse non mi son spiegato. "/storage/emulated/0/" è (quasi sicuramente, continuo a sperare) una costante mentre "e:\Nikon_Immagini\" è definibile dall'utente in un apposito file INI. Da notare che "e:\Nikon_Immagini\" è un percorso secondo lo standard windows; notare il \
Guardando lo screenshot allegato si dovrebbe capire meglio l'utilizzo che ne faccio io. Fa parte di un progetto che prevede l'utilizzo di un programma sotto Windows e di un'app sotto Android che lavorano a volte insieme e che comunque si scambiano i dati.
Se, e sottolineo se, "/storage/emulated/0/" è una costante, qualsiasi dispositivo Android si utilizzi, tutto procede per il meglio e l'app accede correttamente alle cartelle desiderate. Il nome di queste cartelle può essere scelto dall'utente sia nel programma per PC sia nell'app. L'app provvede alla sua corretta transcodifica.
 

Attachments

  • S.jpg
    S.jpg
    100.1 KB · Views: 902

valentino s

Active Member
Licensed User
Longtime User
@AlpVir credo che dipenda tutto dalla liberta' che dai all'utente. Se preferisci che l'utente trovi subito senza impazzire, quella e' una costante come ti viene restituita da File.DirRootExternal .

Se pero' metti il percorso nel database ("Ho un db in cui ho memorizzato un dato che può avere tre possibili valori.") allora tutto va bene finche' android non cambia idea :) perche' a quel punto se file.DirRootExternal puntera' altrove, nel tuo database restera' il vecchio.

Insomma, distinguerei di piu' il database dal software, ma sono io un po' fanatico ...

Bella idea, buon lavoro :)
 

AlpVir

Well-Known Member
Licensed User
Longtime User
@valentino s
Potrei memorizzare la variabile PercorsoAndroid nel file INI, e quindi modificabile (nel malaugurato caso che quelli di Android cambino le carte in tavola) facilmente.
Ma ho fiducia che non capiteranno a breve modifiche radicali della struttura del file system.
 
Top