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:
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:
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:
Per chi fosse curioso, l'applicazione negli screenshots è QUESTA
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