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.

1 commento:

Unknown ha detto...

Salve,
ho visto il tuo sito e l'ho ritenuto interessante.
Sono il curatore di un blog/laboratorio che si occupa di programmazione
http://www.gioelefierro.com

Se ritieni questa idea valida e trovi valido il mio sito, sono a disposizione per scambiarci gratuitamente un link dei nostri rispettivi siti.


Nel mio sito esiste una pagina per i link ai "siti amici" ed uno spazio nella sidebar dedicato al blogroll. Accetterei di inserire anche un piccolo logo (max dimensione 120x30) del vostro sito e una breve decrizione e il tutto in modo gratuito.

Attendo una tua mail che contenga l'ok e l'esatto indirizzo da linkare, prima di procedere al link reciproco tra i nostri rispettivi siti web.

Qualora la tua risposta è positiva, chiedo gentilmente che sia
utilizzato un link testuale a "Gioele Fierro".

Il mio indirizzo web è http://www.gioelefierro.com

Grazie per l'attenzione.Cordiali saluti.

Gioele SL Fierro.

Ricerca personalizzata