DevCorner: inviamo link con Android Beam via NFC
Per questo martedì in concomitanza con l'MWC di Barcellona non vi ammorberemo con tutorial lunghi e complessi, ma realizzeremo una semplicissima app di sicuro effetto. Per stupire i babbani della tecnologia, infatti, non c'è niente di meglio che utilizzare l'NFC per trasferire dei contenuti, in questo caso un semplice link (o del testo). Vediamo quindi subito come fare!
Per la gioia di tutti i puristi del codice, lasciamo perdere l'interfaccia (nella quale abbiamo inserito solo una semplice TextView per non lasciarla completamente vuota!) e dedichiamoci subito al codice Java. Prima, tuttavia, visto che abbiamo intenzione di utilizzare l'NFC dobbiamo specificarne il requisito nel Manifest: inseriamo quindi come API minime le 14 e aggiungiamolo ai permessi richiesti.
Nella nostra MainActivity, per prima cosa implementiamo le intefacce CreateNdefMessageCallback e OnNdefPushCompleteCallback importando i metodi richiesti. Scriviamo quindi un metodo chiamato isBeamAvailable che, come è facile intuire dal nome, ci restituisce un valore booleano a seconda che l'NFC sia disponibile o meno sul dispositivo.
Per scoprirlo, facciamo ricorso al PackageManager.
Richiamato il metodo nell'OnCreate, in caso di responso positivo creiamoci un NFCAdapter e settiamogli i due metodi setNdefPushMessageCallback e setOnNdefPushCompleteCallback a this, ossia a quelli importati con le interfacce che andremo a sovrascrivere.
public class MainActivity extends Activity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i("isBeam",isBeamAvailable()+"");
if(isBeamAvailable()){
//gets NFC Adapter
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
// Register callback to set NDEF message
nfcAdapter.setNdefPushMessageCallback(this, this);
// Register callback to listen for message-sent success
nfcAdapter.setOnNdefPushCompleteCallback(this, this);
}
else{
Toast.makeText(this, "NFC non disponibile", Toast.LENGTH_LONG);
}
}
private boolean isBeamAvailable(){
Log.i("TAG","isBeamAvailable");
PackageManager packageManager = getPackageManager();
return packageManager.hasSystemFeature(PackageManager.FEATURE_NFC);
}
Non rimane, quindi, che fare l'Override del metodo createNdefMessage: al suo interno creiamo un nuovo oggetto NdefMessage al quale associamo l'URL di AndroidWorld.it (ma è anche possibile, allo stesso modo, inviare del semplice testo).
@Override
public NdefMessage createNdefMessage(NfcEvent nfcEvent)
{
// TODO Auto-generated method stub
Log.i("TAG","Metodo invio link");
return new NdefMessage(new NdefRecord[] {
NdefRecord.createUri("https://www.androidworld.it")
});
}
Tutto fatto: come avete visto, per creare un'Activity che invii testo (o link) via NFC sono necessarie davvero poche righe di codice. Nel caso vogliate, potete sovrascrivere anche il metodo onNdefPushComplete per eseguire un'azione a invio avvenuto. Come sempre, potete trovare tutta l'assistenza che volete (nonché il codice sorgente!) nella sezione Developmente del nostro forum. Buon sviluppo a tutti!