Per chi lavora con questi dispositivi o per chi ha letto un mio vecchio articolo questo sicuramente non sarà una novità, da un po' però MS sta rilasciando la compatibilità sempre su più cellulari.
Di conseguenza le opportunità di utilizzo si estendono e soprattutto nascono le prime librerie per essere utilizzate dai più svariati programmi. Oggi vedremo delle semplici e davvero molto intuitive librerie per integrare questo MSTag con i nostri programmi Java.
Prima di tutto abbiamo bisogno di un ambiente di sviluppo che supporti il jdk 1.6 (fortemente consigliato per diverse ragioni) e la libreria di base MSTag che risulta molto piccola e quindi utile anche per applicazioni da scaricare su dispositivi portabili o su applicazioni richiamabili da internet.
La libreria di base la trovate sul sito dello sviluppatore, vi consiglio ovviamente l'ultima versione. Prima di continuare date una lettura anche alla licenza di tipo MIT, ossia una GPL compatibile. Per maggiori informazioni guardate anche su Wikipedia.
Prima di iniziare e bene sapere che un Tag contiene delle informazioni, ma di che tipo? Attualmente possiamo trovare informazioni di varia natura:
- URITag: contiene un indirizzo Web
- FreeTextTag: contiene del testo libero
- DialerTag: contiene un numero di telefono
- VCardTag: contiene un biglietto da visita elettronico
Per utilizzare i MSTag è necessario registrarsi sul sito microsoft tag dove basta possedere un account hotmail e richiedere la chiave per generare i codici Tag (c'è un modulo sempre sul loro sito). la risposta generalmente è molto veloce da poche ore a un paio di giorni massimo.
Bene ora che abbiamo tutti i strumenti possiamo iniziare, l'esempio è stato preso e semplificato da quello presente sul sito di riferimento. Di fatto, utilizzerò solo i tag di tipo URI ci aggiungo le note e modifico leggermente dei metodi per renderlo riusabile come classe di interfaccia unica di appoggio a queste librerie. Ecco il codice completo:
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import net.suddenelfilio.ws.tag.BarcodeGenerationSettings;
import net.suddenelfilio.ws.tag.ImageTypes;
import net.suddenelfilio.ws.tag.MSTagService;
import net.suddenelfilio.ws.tag.TagDecorations;
import net.suddenelfilio.ws.tag.URITag;
public class TestMyTag
{
/**
* @param args
*/
public static void main(String[] args)
{
TestMyTag tmt = new TestMyTag();
tmt.setUp();
URITag tag = tmt.createURITag();
tmt.activateURITag(tag);
tmt.createURITagImage(tag);
}
public URITag createURITag()
{
MSTagService svc = new MSTagService();
URITag tag = new URITag();
tag.CategoryName = "Main";
tag.Title = "Ondare Blog";
tag.MedFiUrl = "http://ondare.blogspot.com";
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
tag.UTCStartDate = sdf.format(now);
try
{
String result = svc.Create(tag);
System.out.println("createURITag : "+result);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
return tag;
}
public boolean activateURITag(URITag tag)
{
if (tag == null)
return false;
MSTagService svc = new MSTagService();
try
{
String result = svc.Activate(tag);
System.out.println("activateURITag : "+result);
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
public boolean createURITagImage(URITag tag)
{
if (tag == null)
return false;
MSTagService svc = new MSTagService();
BarcodeGenerationSettings settings = new BarcodeGenerationSettings();
settings.CategoryName = tag.CategoryName;
settings.TagTitle = tag.Title;
settings.ImageType = ImageTypes.Jpeg;
settings.Decoration = TagDecorations.HCCBRP_DECORATION_NONE;
settings.Size = 0.75;
try
{
byte[] barcode = svc.GenerateBarcode(settings);
FileOutputStream fos = new FileOutputStream(System.getProperty("user.dir")+"/barcode.jpg");
fos.write(barcode);
fos.close();
File f = new File(System.getProperty("user.dir")+"/barcode.jpg");
System.out.println("createURITagImage : "+f.exists());
return f.exists();
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
protected void setUp()
{
MSTagService.SVCAPITOKEN = "<MY-PRIVATE-CODE-FROM-MICROSOFT>"; //codice privato assegnato da MS
}
}
Okay, l'esempio risulta abbastanza semplice tuttavia porto alcune considerazioni sui diversi blocchi di codice per meglio spiegare funzioni e caratteristiche. Non ho usato un package di riferimento e ho anche minimizzato le classi importate per non appesantire inutilmente l'esempio, come vedete le classi della libreria MSTag usata fa riferimento al package net.suddenelfilio.ws.tag. Potete anche importare tutto il package ma trovo interessante "esploderli" e utilizzare sempre e solo el vere classi coinvolte.
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import net.suddenelfilio.ws.tag.BarcodeGenerationSettings;
import net.suddenelfilio.ws.tag.ImageTypes;
import net.suddenelfilio.ws.tag.MSTagService;
import net.suddenelfilio.ws.tag.TagDecorations;
import net.suddenelfilio.ws.tag.URITag;
public class TestMyTag
{
// Codice tolto solo per spiegazione
}
Il metodo createURITag è molto semplice e si presta per essere implementato, per esempio accettando in ingresso il tipo di Tag da creare (URI, vCard, FreeText o Dialer):
public URITag createURITag()
{
MSTagService svc = new MSTagService();
URITag tag = new URITag();
tag.CategoryName = "Main";
tag.Title = "Ondare Blog";
tag.MedFiUrl = "http://ondare.blogspot.com";
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
tag.UTCStartDate = sdf.format(now);
try
{
String result = svc.Create(tag);
System.out.println("createURITag : "+result);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
return tag;
}
Col metodo precedente abbiamo quindi creato il tag, una volta che questo avviene correttamente creato è necessario attivarlo, questo viene fatto tramite la classe MSTagService che eseguirà una chiamata (tramite l'indirizzo http://tag.ws.suddenelfilio.net/mstagrest.svc/ ) al servizio MS.
public boolean activateURITag(URITag tag)
{
if (tag == null)
return false;
MSTagService svc = new MSTagService();
try
{
String result = svc.Activate(tag);
System.out.println("activateURITag : "+result);
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
Di fatto il nostro Tag se l'attivazione è avvenuto correttamente, risulta presente nel repository della MS. Infatti, se ci colleghiamo sul sito tag.microsoft.com troviamo nella categoria "Main" il tag "Ondare Blog". Di fatto il tag è quindi registrato e utilizzabile, se vogliamo possiamo creare
public boolean createURITagImage(URITag tag)
{
if (tag == null)
return false;
MSTagService svc = new MSTagService();
BarcodeGenerationSettings settings = new BarcodeGenerationSettings();
settings.CategoryName = tag.CategoryName;
settings.TagTitle = tag.Title;
settings.ImageType = ImageTypes.Jpeg;
settings.Decoration = TagDecorations.HCCBRP_DECORATION_NONE;
settings.Size = 0.75;
try
{
byte[] barcode = svc.GenerateBarcode(settings);
FileOutputStream fos = new FileOutputStream(System.getProperty("user.dir")+"/barcode.jpg");
fos.write(barcode);
fos.close();
File f = new File(System.getProperty("user.dir")+"/barcode.jpg");
System.out.println("createURITagImage : "+f.exists());
return f.exists();
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
Come vedete è possibile specificare il formato dell'immagine da creare e come "decorare" il tag, per la precisione:
Viene visualizzata solo l'immagine del Tag.
Oltre all'immagine del Tag, vengono riportate anche le istruzioni testuali e il sito da cui scaricare l'applicativo per la lettura da dispositivo mobile.
Oltre all'immagine del Tag, vengono riportate anche le istruzioni testuali e grafiche e il sito da cui scaricare l'applicativo per la lettura da dispositivo mobile. Come dimensioni risulta un compromesso fra i due precedenti.
protected void setUp()
{
MSTagService.SVCAPITOKEN = "<MY-PRIVATE-CODE-FROM-MICROSOFT>"; //codice privato assegnato da MS
}
Ma ora che abbiamo generato il codice come possiamo testarlo? Semplice basta collegarsi - ad esempio - tramite un cellulare che abbia una fotocamera integrata al sito gettag.mobi (sito Microsoft) e automaticamente verrà scaricata l'applicazione.Dalle prove mi sono stupito dalla velocità di acquisizione, davvero interessante soprattutto perché è possibile acquisirlo in movimento (sena correre mi raccomando), da angolazioni non proprio perpendicolari e soprattutto non dovendo eseguire fastidiosi zoom o elaborazioni dell'immagine.
Se non volete generare un codice ma volete verificare la compatibilità del vostro cellulare una volta installato l'applicazione sul cellulare scansionate l'immagine dell'articolo (richiama a un sito sicuro.. questo!)
Buona scansione!
Collegamenti esterni: Microsoft Tag | Librerie MSTagJava | Gettag (Per dispositivi Mobile) | Licenza MIT (Wikipedia)