Titanium Mobile: download di aggiornamenti in background



Un rapido snipped di codice che permette di gestire l'aggiornamento over-the-air di file presenti all'interno della nostra app:

[sourcecode language="java"]
function getFile(filename) {
Ti.API.info("Carico file" + filename + ".txt");
var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt');
var contents = f.read();
contents = contents.text;
if(Titanium.Network.networkType != Titanium.Network.NETWORK_NONE) {
//Scarico cache
Ti.API.info("scarico cache");
var xhr = Titanium.Network.createHTTPClient();
xhr.open("GET", "http://[SERVER DI PROVISIONING]/" + filename + ".txt");
xhr.onload = function() {
statusCode = xhr.status;
if(statusCode == 200) {
var doc = this.responseText;
Ti.API.info(doc);
var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt');
Ti.API.info("ELIMINO VECCHIO FILE:" + f.deleteFile());
f.write(doc);
}
};
xhr.send();
}
return contents;
}
[/sourcecode]

I file devono essere già presenti nella location Ti.Filesystem.applicationDataDirectory: la cosa migliore da fare è copiarli nella cartella Resources del progetto (io utilizzo una directory archivi nella quale metto tutti gli archivi 'di default') e copiarli in applicationDataDirectory con questa semplice funzione:

[sourcecode language="java"]
function copyFile(filename) {
var fromFile = Titanium.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'archivi/' + filename + '.txt');
var contenuto = fromFile.read()
var toFile = Titanium.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, filename + '.txt');
if(toFile.exists() === false)
toFile.write(contenuto);
}
[/sourcecode]

La funzione getFile non fa altro che prelevare il file dal path passato come parametro e restituirlo, contestualmente verifica se è presente una connessione di rete disponibile e inizia a scaricare in background una nuova versione del file (dall'indirizzo specificato con [SERVER DI PROVISIONING]).A download terminato lo sostituisce a quello attualmente in uso.

Al successivo avvio dell'applicazione, i dati saranno aggiornati.

Published: April 03 2012

  • category: