sabato 31 gennaio 2009

Integrazione con applicazioni BlackBerry - 3° parte

Eccoci finalmente, dopo qualche giorno di pausa, alla terza parte di questa panoramica sugli aspetti tecnici dell'integrazione con le applicazioni native del BlackBerry. Uno degli obiettivi che mi sono posto durante la progettazione di Copilota consiste nel dare la possibilità a chi utilizza l'applicazione di condividere con amici e colleghi quanto di interessante (ristoranti, musei, ecc.) ha scoperto durante i suoi viaggi. Lo strumento più naturale per raggiungere questo scopo mi è sembrata l'email, quindi mi sono trovato di fronte alla necessità di inviare allegati contenenti le informazioni applicative e di riconoscerle sul dispositivo del destinatario, in modo da poterle gestire opportunamente. La piattaforma di RIM mette a disposizione un'apposita interfaccia, net.rim.blackberry.api.mail.AttachmentHandler, le cui implementazioni possono essere registrate come gestori di allegati personalizzati, tramite il metodo addAttachmentHandler della classe net.rim.blackberry.api.mail.AttachmentHandlerManager. Questa interfaccia presenta tre metodi:
  • String menuString() - permette di indicare la voce di menù che appare quando si seleziona un allegato gestito da questa implementazione;
  • boolean supports(String contentType) - viene utilizzato per discriminare gli allegati da gestire da tutti gli altri. In questo metodo bisogna controllare che il contentType passato sia riconducibile a quello dell'allegato con le informazioni applicative;
  • void run(Message m, SupportedAttachmentPart p) - è il metodo che viene eseguito quando l'utente seleziona la voce di menù associata a questo gestore. Il contentuto dell'allegato può essere ricavato tramite la chiamata p.getContent(), che restituisce un array di byte, da interpretare secondo un certo formato (testo, immagine, file zip, ecc.)
Come ho scritto in un post precedente, la chiamata p.getContent() funziona solo con le versioni del sistema operativo dalla 4.5.0.63 in poi; quindi, per poter fornire questa funzionalità a tutti i possessori di BlackBerry, ho inviato i dati da condividere sia nell'allegato che nel corpo del messaggio: se non trovo niente nel primo, li recupero dal secondo.

Nel prossimo post completerò questo argomento, esaminando come creare e inviare via mail un allegato personalizzato. A questo punto vi saluto con alcune novità:
  • Copilota ha superato abbondantemente i 300 download e anche le altre applicazioni per BlackBerry ultimamente sono state scaricate molte volte, in particolare IBANc;
  • Ho iniziato a sviluppare una nuova applicazione per BlackBerry; il progetto è già impostato e alcune classi sono completate, ma ancora mancano tutte quelle che costituiscono l'interfaccia grafica;
  • Abbiamo adottato GWT e SmartGWT come librerie base per un nuovo progetto relativamente complesso e sono molto soddisfatto dei risultati ottenuti fino a questo momento. La possibilità di realizzare applicazioni AJAX direttamente in Java è notevole e spero di poter dedicare qualche prossimo post a questi argomenti.

giovedì 15 gennaio 2009

Integrazione con applicazioni BlackBerry - 2° parte

Eccoci alla seconda puntata dedicata alle problematiche di integrazione con le applicazioni native del BlackBerry. Prima di affrontare i temi tecnici, sono molto contento di poter annunciare che l'applicazione Copilota è stata scaricata più di 150 volte nei primi due giorni dalla pubblicazione. Anche le altre applicazioni per BlackBerry che abbiamo rilasciato i mesi scorsi, cioè IBANc, Risparmiometro e BB Trainer, sono state riscoperte e scaricate molte volte. Devo anche ringraziare gli amici di BlackBerryItalia, BBWorld e Blackberry Italian Usergroup per aver pubblicato sui loro siti Web articoli sulle nostre applicazioni.

L'argomento di questo post è l'integrazione con il GPS e lo strumento per le Mappe. Il mio scopo era abbastanza semplice, cioè leggere le coordinate correnti e visualizzarle sulla mappa. Ovviamente il GPS fornisce molte altre informazioni, come l'altitudine o la velocità, ma per il momento mi sono limitato a latitudine e longitudine.
Prima di tutto è necessario recuperare un'istanza della classe javax.microedition.location.LocationProvider tramite il metodo statico getInstance(Criteria criteria): il parametro criteria permette di indicare il tipo di localizzazione desiderato (ad esempio GPS o GSM), specificando null, come nel mio caso, si ottiene il LocationProvider predefinito. Nel caso in cui questa funzionalità non sia disponibile viene lanciata una LocationException.

locationProvider = LocationProvider.getInstance(null);

A questo punto è possibile recuperare le coordinate correnti tramite il metodo getLocation(int timeout). La documentazione in formato PDF riporta una nota non presente nei JavaDoc: questa chiamata non può essere eseguita nel thread degli eventi (ad esempio nel gestore di un menù), altrimenti viene lanciata un'eccezione LocationException. Ho sperimentato direttamente che quanto affermato è vero e quindi ho dovuto lanciare un thread in background per eseguire il metodo. Quindi nel metodo run() bisogna scrivere qualcosa del genere:

Location location = locationProvider.getLocation(60);
QualifiedCoordinates qf = location.getQualifiedCoordinates();
double latitudine = qf.getLatitude();
double longitudine = qf.getLongitude();

Per lasciare l'utente in attesa del completamento dell'operazione ho aperto un dialogo modale con una barra di avanzamento, che scandisce i secondi.

Una volta recuperate le coordinate è possibile aprire lo strumento per le Mappe e visualizzare la posizione, utilizzando la classe Invoke già analizzata nel post precedente. In questo caso è necessario preparare una stringa con un formato specifico e passarla tramite la classe MapsArguments.

String location = "<lbs>" +
"<location lat='" + String.valueOf((int)(latitudine * 100000)) +
"' lon='" + String.valueOf((int)(longitudine * 100000)) + "'/>" +
"</lbs>";

MapsArguments maps = new MapsArguments(MapsArguments.ARG_LOCATION_DOCUMENT, location);
Invoke.invokeApplication(Invoke.APP_TYPE_MAPS, maps);

L'unica accortezza è moltiplicare per 100000 i valori delle coordinate e quindi trasformarli in interi.

Per ora vi saluto e vi rimando al prossimo articolo, in cui vedremo come gestire in modo personalizzato gli allegati dei messaggi di posta.

domenica 11 gennaio 2009

Integrazione con applicazioni BlackBerry - 1° parte

Questo riepilogo non è disponibile. Fai clic qui per visualizzare il post.

Finalmente posso presentarvi Copilota per BlackBerry!

Ce l'ho fatta! Dopo diversi giorni di test, la nuova applicazione per BlackBerry, a cui ho lavorato sodo per più di un mese, è finalmente pronta e scaricabile (sempre gratuitamente) dal sito di DataFox. Copilota (questo il nome che ho scelto) è rivolta a chi utilizza spesso l'auto per lavoro e svago e vuol tenere traccia dei propri viaggi e delle spese che sostiene, memorizzare i posti o i locali più interessanti, controllare i rifornimenti di carburante e le relative spese. Le funzionalità sono veramente numerose e così pure il codice Java che ho scritto per implementarle tutte, tanto che il pacchetto .cod generato dal compilatore di RIM supera i 70KByte, più del doppio di quello di BB Trainer, l'applicazione realizzata prima di questa. Per poter descrivere tutti i pannelli di Copilota e fornire indicazioni sufficienti a chi è interessato all'applicazione, ho preferito suddividere la pagina che fino ad ora ho dedicato a questo scopo in diverse pagine, ciascuna relativa ad una certa funzione: introduzione, viaggi, spese, segnalazioni, rifornimenti.
Le due parti che hanno richiesto il maggior impegno sono quella relativa alle Segnalazioni e quella relativa ai Rifornimenti. La prima in quanto offre diverse integrazioni con le applicazioni native del BlackBerry, in particolare il GPS e le Mappe; inoltre è stato implementato un meccanismo di condivisione delle Segnalazioni basato su mail, che ha richiesto l'accesso ai Contatti, la lettura e la scrittura dei messaggi e degli allegati, l'invio di mail. La seconda in quanto non solo permette di registrare i rifornimenti, ma consente di calcolare stime del consumo medio (Km al litro) e del costo kilometrico medio (Euro al kilometro) e di visualizzare i risultati sia in forma tabellare che grafica. Il calcolo è abbastanza complesso, in quanto tiene conto sia dei rifornimenti completi (i "pieni") che di quelli parziali e ricava i diversi valori nel corso del tempo.

Quindi non mi resta che augurarvi buon viaggio con il vostro nuovo Copilota per BlackBerry!

martedì 6 gennaio 2009

Primo post del 2009!

Prima di tutto auguro Buon Anno ai miei cinque lettori!

Poi l'annuncio che ho dovuto rimandare per diverso tempo: la nuova applicazione per BlackBerry è finalmente completata e, anche se mancano gli ultimi test, sto preparando le pagine con tutte le informazioni e le schermate da pubblicare sul sito di DataFox. Quindi ancora qualche giorno di pazienza e potrò svelare il nome e le funzionalità di quanto ho realizzato con tanta fatica!

Ho deciso di dedicare i prossimi post tecnici alle problematiche che ho affrontato e risolto durante lo sviluppo di questa applicazione, in particolare l'integrazione con le funzionalità native del BlackBerry, come il dispositivo GPS e la gestione degli allegati dei messaggi di posta.

Restate sintonizzati!
Ricerca personalizzata