Magazine Informatica

Titanium Mobile: servizi in background su Android

Creato il 05 marzo 2012 da Andreafortuna @AndyF

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.

Titanium Mobile: servizi in background su Android
Titanium Mobile: servizi in background su Android

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:

    
        
    

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


Ritornare alla prima pagina di Logo Paperblog