MICHELEPISANI.IT
 

Gestire il FileSystem dei dispositivi con Cordova

Scrivere un file nella memoria persistente con Cordova/Android

Dicembre 07
07:222015

Premetto che il codice per gestire il file system con Cordova per scrivere/leggere un file su un dispositivo Android è relativamente semplice e l'esempio che ripropongo di seguito, riferito alla creazione e scrittura di un file, è perfettamente funzionante e di immediata integrazione, tuttavia mi sono imbattuto in un grattacapo non indifferente che mi ha allungato, se pur di poco, i tempi di lavoro e che riporto in quest'articolo corredandolo con la soluzione.
Per scrivere sul file system con Cordova è necessario prima di tutto installare l'opportuno plugin:

cordova plugin add cordova-plugin-file

A quel punto basta richiamare nel deviceready, o in una funziona chiamata all'occorenza con un'interazione dopo che il dispositivo è pronto, il seguente codice:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);

Nella funzione gotFS sarà inserito il codice che ci interessa, nel nostro caso quello relativo alla generazione di un file di tipo txt che a sua volta richiama una funzione per scrivere del testo al suo interno in caso di successo o di avvisare l'utente in caso di problemi durante tale processo:

function gotFS(fileSystem) {
  console.log(fileSystem.root);
  fileSystem.root.getFile("test.txt", { create: true }, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
  fileEntry.createWriter(gotFileWriter, fail);
}

function gotFileWriter(writer) {
  writer.onwrite = function (evt) {
    console.log("Scrittura del file effettuata con successo");
  };
  writer.write("Contenuto da scrivere nel file")

}

function fail(error) {
  if (error.code == 1) {
    console.log('Errore! File non generato o non trovato');
  }
  console.log(error.code);
}

Fin qui niente di anomalo, e probabilmente su alcune versioni di Cordova/Android non si incontrano problemi, se non fosse che nonostante svariati tentativi dove il codice sembrava funzionare con tanto di risposte di successo nei log non è stato possibile riscontrare la presenza del file generato sul dispositivo. La mia attenzione a quel punto si è focalizzata sul path della root che il plugin di Cordova, per gestire i file, prendeva in considerazione.

Molto probabilmente con il variare delle versioni del plugin, così come del sistema operativo del dispositivo Android, emerge una sorta di conflitto con il recupero del path tra la memoria interna ed esterna. Nel mio caso ho effettuato dei test con Cordova 5.3.3 e dispositivo fisico Android con SO Lollipop, osservando dalla console di debug emergeva questo percorso:

file:///data/data/{package}/files/files/

Leggendo anche il messaggio restituito dalla CLI (fig. 1) al momento dell'installazione del plugin ho avuto conferma dei miei sospetti:

Cordova - Modificare il file config.xml nel caso non sia specificato il path si salvataggio
Fig. 1 - Cordova - Modificare il file config.xml nel caso non sia specificato il path si salvataggio

Il messaggio all'aggiunta del plugin cordova-plugin-file era quindi il seguente:

The Android Persistent storage location now defaults to "Internal". Please check this plugins README to see if you application needs any changes in its config.xml.
If this is a new application no changes are required.
If this is an update to an existing application that did not specify an "AndroidPersistentFileLocation" you may need to add:
"preference name="AndroidPersistentFileLocation" value="Compatibility"
to config.xml in order for the application to find previously stored files.

Modificando il file config.xml dell'app aggiungendo il codice di cui sotto all'interno del tag relativo alla piattaforma android è stato possibile salvare il file nella memoria interna del dispositvo:

"<preference name="AndroidPersistentFileLocation" value="Compatibility" ></preference>"

A quel punto il path della root speficiato sarà:

file:///storage/emulated/0/

Diventa ora possibile gestire file e cartelle partendo da una root riconosciuta.

Tags
Condividi

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

Scrivi un Commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Grazie Paolo,
spero possa tornarti utile per i tuoi scopi.

Paolo

salve,mi interessa il progetto sensore gas ,per applicazioni in agricoltura.Vedremo gli …

Michele Pisani

Ciao Rossana,
strano problema, una domanda: continui a visualizzare entrambe le pagine o una …

Rossana

Ciao Michele, il mio problema è che Facebook non mi risponde. Mi è successo tre volte: faccio …