Titanium Mobile: servizi in background su Android



Rispetto a PhoneGap, Titanium Mobile ci permette di accedere a funzionalità specifiche del sistema su cui andiamo a sviluppare.
Ad esempio, su Android, possiamo realizzare semplici servizi in background che sopravvivono alla chiusura dell'app, ottimi per gestire le notifiche.

Per prima cosa, è necessario creare un file .js (Es. UpdateService.js), contenente il codice che il nostro servizio andrà ad eseguire a intervalli regolari, ad esempio la presenza di un nuovo elemento in un feed RSS. Se l'elemento è stato trovato, invieremo anche una notifica sulla barra e salveremo l'ultimo elemento per le successive verifiche:



//Verifico presenza di nuova notifica

var loader = Titanium.Network.createHTTPClient();

loader.open("GET",[URL DEL FEED]);



loader.onload = function()

{

var xml = Ti.XML.parseString(this.responseText);

var items = xml.documentElement.getElementsByTagName("item");

Push = items.item(0).getElementsByTagName("title").item(0).text;

var LastPush = Titanium.App.Properties.getString("LastPush");

if (LastPush != Push) {

sendNotify(SiteName,"Nuovo Articolo:" + Push,SiteName + ", nuovo articolo!");

//Aggiorno LastPush

Titanium.App.Properties.setString("LastPush",Push);

}

}

loader.send();



function sendNotify(titolo,testo, ticker) {

//Creo notifica

var activity = Ti.Android.currentActivity();

var intent = Ti.Android.createIntent({

action : Ti.Android.ACTION_MAIN,

url : 'app.js',

flags : Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_SINGLE_TOP

});

intent.addCategory(Titanium.Android.CATEGORY_LAUNCHER);

var pending = Ti.Android.createPendingIntent({

intent : intent,

type : Ti.Android.PENDING_INTENT_FOR_ACTIVITY,

flags : Ti.Android.FLAG_ACTIVITY_NO_HISTORY

});



var notification = Ti.Android.createNotification({

contentIntent : pending,

contentTitle : titolo,

contentText : testo,

tickerText : ticker,

when : new Date().getTime(),

icon : Ti.App.Android.R.drawable.appicon,

flags : Titanium.Android.ACTION_DEFAULT | Titanium.Android.FLAG_AUTO_CANCEL | Titanium.Android.FLAG_SHOW_LIGHTS

});

Ti.Android.NotificationManager.notify(1, notification);

}



La funzione sendNotify può essere riutilizzata in molti contesti, permette di inviare in maniera agevole informazioni sulla barra delle notifiche: l'icona utilizzata sarà quella di default della applicazione, mentre l'action da effettuare quando viene eseguito il tap sulla notifica è definita con la proprietà url dell'intent (nel nostro caso viene caricata app.js, la finestra principale dell'app).

Una volta definite le istruzioni che dovrà eseguire, è necessario creare il servizio e avviarlo con questo frammento di codice:



var SECONDS = 600;

var intent = Titanium.Android.createServiceIntent({

url: 'UpdateService.js'

});

intent.putExtra('interval', SECONDS * 1000);

Titanium.Android.startService(intent);



la proprietà interval dell'intent definisce l'intervallo in millisecondi (600000, 10 minuti) che dovrà intercorrere tra un'esecuzione e l'altra del codice presente in UpdateService.js.



Il codice in questione può essere richiamato all'avvio dell'app: quando poi l'applicazione viene messa in secondo piano, il servizio rimane in esecuzione e nel caso rilevi un cambiamento invia una notifica sulla barra.

Come ultima cosa, bisogna registrare nel manifest dell'applicazione il servizio, inserendo nel tiapp.xml del progetto queste righe:



<android xmlns:android="http://schemas.android.com/apk/res/android">

    <services>

        <service url="UpdateService.js" type="interval"/>

    </services>

</android>



Per chi fosse curioso, l'applicazione negli screenshots è QUESTA

Published: March 05 2012

  • category: