DevCorner620

DevCorner: inviamo link con Android Beam via NFC

Giuseppe Tripodi

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 setNdefPushMessageCallbacksetOnNdefPushCompleteCallback 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("http://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!

Via: DevCorner
android beam