- Ho iniziato ad usare abbastanza seriamente il Bold e devo riconoscere che è veramente un ottimo telefono: mi piace molto il modo d'utilizzo e le funzioni disponibili. Il tema standard non mi ha mai impressionato e, visto che sono appassionato del MacOS X (anche se purtroppo non posso permettermi un Mac) , l'ho sostituito con OSXLike di Hedone Design, che vale tutti gli Euro che costa, considerata la cura con cui è realizzato;
- Ho completato la configurazione del BPS (BlackBerry Professional Server) sul nostro server di posta aziendale e ho attivato la mia casella di posta Exchange per l'accesso con il Bold. Al momento funziona solo tramite collegamento USB, perché non sono riuscito ad attivare l'estensione dell'abbonamento wireless. Senza scendere in troppi dettagli, riuscire a districarsi fra tutte le varie opzioni e tipologie di contratti previsti è molto più complesso che realizzare un sistema software aziendale, a meno di non tapparsi il naso e firmare tutti i moduli previsti, spendendo un capitale per attività che, come DataFox, possiamo tranquillamente portare a termine in completa autonomia.
- Lo sviluppo della nuova applicazione procede abbastanza speditamente, anche se non credo di poter rispettare la scadenza di fine febbraio che mi sono dato. Anche in questo caso ho cercato di complicarmi un po' la vita (altrimenti che gusto c'è?) e fra le varie funzioni è prevista l'esportazione dei dati in formato CSV (compatibile con Excel), sia direttamente nella memoria (interna o scheda) che tramite email. Una volta pubblicata l'applicazione, dedicherò un articolo proprio al tema dell'accesso ai file su BlackBerry.
- L'applicazione gratuita Copilota per BlackBerry ha superato in questi giorni i 400 download e questo risultato mi sembra lusinghiero, se non altro per l'interesse nelle funzionalità implementate. Nel frattempo ci siamo iscritti sul nuovo portale di RIM (BlackBerry Application StoreFront) e, se viene accettata, questa sarà la nostra prima applicazione pubblicata ufficialmente. Speriamo bene...
Soluzioni, spunti, suggerimenti, trucchi, nuove idee per chi vive e lavora tutti i giorni con le tecnologie informatiche.
mercoledì 25 febbraio 2009
Un veloce aggiornamento
Mi dispiacerebbe se i miei cinque lettori pensassero che mi sono dato alla macchia e denunciassero la mia scomparsa, quindi riepilogo in questo post poco tecnico le novità degli ultimi giorni:
domenica 15 febbraio 2009
Integrazione con applicazioni BlackBerry - 4° parte
Siamo finalmente giunti (qualcuno potrebbe esclamare: era ora!) all'ultima puntata relativa alle problematiche di integrazione con le applicazioni standard del BlackBerry. Dopo aver esaminato il meccanismo per elaborare in modo personalizzato gli allegati presenti nelle email, vediamo la tecnica complementare, cioè come inviare messaggi di posta elettronica con file allegati.
La sequenza di operazioni può essere riassunta nei seguenti punti:
Scelta della cartella in cui memorizzare il messaggio e creazione del messaggio
Store store = Session.getDefaultInstance().getStore();
Folder[] folders = store.list(Folder.SENT);
Folder sentfolder = folders[0];
Message msg = new Message(sentfolder);
Creazione della lista di destinatari a cui inviare il messaggio
Address toList[] = new Address[1];
toList[0]= new Address("rossi@email.it", "Mario Rossi");
msg.addRecipients(Message.RecipientType.TO, toList);
Caricamento del mittente
Address from = new Address("bianchi@email.it", "Paolo Bianchi");
msg.setFrom(from);
Impostazione del soggetto
msg.setSubject("Soggetto dal mail");
Creazione del contenuto, che conterrà la parte con il corpo del messaggio e quella con l'allegato
Multipart multipart = new Multipart();
TextBodyPart body = new TextBodyPart(multipart, messaggio);
SupportedAttachmentPart attach = new SupportedAttachmentPart(multipart, MIME_TYPE, FILE_NAME, allegato.getBytes());
multipart.addBodyPart(body);
multipart.addBodyPart(attach);
msg.setContent(multipart);
Invio del messaggio
Transport.send(msg);
Il penultimo punto è il più importante e il più delicato. Nel codice si utilizzano due variabili di tipo String, messaggio e allegato, che rappresentano rispettivamente il testo del messaggio e quello dell'allegato, da cui si estraggono i byte da inviare. Sono presenti anche due costanti, MIME_TYPE e FILE_NAME, che vengono utilizzate dalla libreria di RIM per impostare i dati fondamentali dell'allegato. Nel caso di Copilota, tali costanti valgono:
MIME_TYPE = "application/x-rimdevice-SegnalazioneCopilota";
FILE_NAME = "x-rimdevice-SegnalazioneCopilota-ABC.cpl";
Il nome del file ripete parte del tipo MIME, in quanto l'infrastruttura di mail del BlackBerry elimina la seconda parte del MIME Type (quella dopo lo /) e la sostituisce con il nome del file. In questo modo il tipo MIME completo risulta:
application/x-rimdevice-SegnalazioneCopilota-ABC.cpl
Sfruttando parti di questa stringa è possibile associare un handler applicativo ad un particolare tipo di allegato, come è stato fatto proprio in Copilota, dove si controlla la presenza della stringa
x-rimdevice-SegnalazioneCopilota
all'interno del tipo MIME dell'allegato.
Vi saluto confermandovi che sto portando avanti lo sviluppo di una nuova applicazione per BlackBerry: sono già a buon punto e spero di finire tutto entro febbraio. Contemporaneamente sto sperimentando con un BlackBerry Bold e con il sistema server di RIM (la versione Professional del BES), in modo da toccare con mano le potenzialità di questa infrastruttura, in particolare per quanto riguarda la gestione dei criteri IT. Spero di raccogliere materiale sufficiente per scrivere qualche post interessante.
La sequenza di operazioni può essere riassunta nei seguenti punti:
- Scelta della cartella in cui memorizzare il messaggio e creazione del messaggio
- Creazione della lista di destinatari a cui inviare il messaggio
- Caricamento del mittente
- Impostazione del soggetto
- Creazione del contenuto, che conterrà la parte con il corpo del messaggio e quella con l'allegato
- Invio del messaggio
Scelta della cartella in cui memorizzare il messaggio e creazione del messaggio
Store store = Session.getDefaultInstance().getStore();
Folder[] folders = store.list(Folder.SENT);
Folder sentfolder = folders[0];
Message msg = new Message(sentfolder);
Creazione della lista di destinatari a cui inviare il messaggio
Address toList[] = new Address[1];
toList[0]= new Address("rossi@email.it", "Mario Rossi");
msg.addRecipients(Message.RecipientType.TO, toList);
Caricamento del mittente
Address from = new Address("bianchi@email.it", "Paolo Bianchi");
msg.setFrom(from);
Impostazione del soggetto
msg.setSubject("Soggetto dal mail");
Creazione del contenuto, che conterrà la parte con il corpo del messaggio e quella con l'allegato
Multipart multipart = new Multipart();
TextBodyPart body = new TextBodyPart(multipart, messaggio);
SupportedAttachmentPart attach = new SupportedAttachmentPart(multipart, MIME_TYPE, FILE_NAME, allegato.getBytes());
multipart.addBodyPart(body);
multipart.addBodyPart(attach);
msg.setContent(multipart);
Invio del messaggio
Transport.send(msg);
Il penultimo punto è il più importante e il più delicato. Nel codice si utilizzano due variabili di tipo String, messaggio e allegato, che rappresentano rispettivamente il testo del messaggio e quello dell'allegato, da cui si estraggono i byte da inviare. Sono presenti anche due costanti, MIME_TYPE e FILE_NAME, che vengono utilizzate dalla libreria di RIM per impostare i dati fondamentali dell'allegato. Nel caso di Copilota, tali costanti valgono:
MIME_TYPE = "application/x-rimdevice-SegnalazioneCopilota";
FILE_NAME = "x-rimdevice-SegnalazioneCopilota-ABC.cpl";
Il nome del file ripete parte del tipo MIME, in quanto l'infrastruttura di mail del BlackBerry elimina la seconda parte del MIME Type (quella dopo lo /) e la sostituisce con il nome del file. In questo modo il tipo MIME completo risulta:
application/x-rimdevice-SegnalazioneCopilota-ABC.cpl
Sfruttando parti di questa stringa è possibile associare un handler applicativo ad un particolare tipo di allegato, come è stato fatto proprio in Copilota, dove si controlla la presenza della stringa
x-rimdevice-SegnalazioneCopilota
all'interno del tipo MIME dell'allegato.
Vi saluto confermandovi che sto portando avanti lo sviluppo di una nuova applicazione per BlackBerry: sono già a buon punto e spero di finire tutto entro febbraio. Contemporaneamente sto sperimentando con un BlackBerry Bold e con il sistema server di RIM (la versione Professional del BES), in modo da toccare con mano le potenzialità di questa infrastruttura, in particolare per quanto riguarda la gestione dei criteri IT. Spero di raccogliere materiale sufficiente per scrivere qualche post interessante.
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:
Nel prossimo post completerò questo argomento, esaminando come creare e inviare via mail un allegato personalizzato. A questo punto vi saluto con alcune novità:
- 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.)
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.
Etichette:
AJAX,
componenti BlackBerry,
software BlackBerry,
sviluppo BlackBerry
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.
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.
Etichette:
componenti BlackBerry,
software BlackBerry,
sviluppo BlackBerry
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!
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!
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!
Iscriviti a:
Post (Atom)
Ricerca personalizzata