Android Beam

2
9641

Tutorial sobre Android Beam

0. Índice de contenidos.

1. Introducción

Android Beam es una tecnología que ha aparecido con Android 4.0 que sirve para el intercambio de información a través del chip NFC. Si queréis ver cómo funciona, podéis ver este vídeo de la propia Google.

En este tutorial vamos a ver cómo podemos hacer uso de esta tecnología de una manera realmente fácil en nuestros desarrollos para Android. Vamos a crear una aplicación en la que realizaremos el paso de mensaje de texto de un dispositivo a otro.

2. Entorno

  • Hardware
    • Mackbook Pro
      • Intel Core i7 2Ghz
      • 8GB RAM
      • 500GB HD
      • Sistema Operativo: Mac OS X (10.7.2)
    • Nexus S
      • Android 4.0.3 (ICS).
    • Galaxy Nexus
      • Android 4.0.2 (ICS).
  • Software
    • Eclipse Indigo con el plugín de desarrollo para Android

NOTA: Si queréis probar este tutorial en vuestro teléfono Android, necesitáis disponer de un teléfono con Android 4.0 o superior y que además disponga del chip NFC.

3. Creación del proyecto.

Ejecutamos Eclipse y creamos un proyecto Android.


En la siguiente pantalla, debemos marcar «Android 4.0» como la versión de Android para la que vamos a desarrollar la aplicación.


Nuestra aplicación va a constar de dos Activities, uno que se usará para escribir el texto de lo que queremos enviar y otro en el que recogeremos el evento cuando se recibe un mensaje por Beam.

Como vamos a hacer uso del NFC, necesitamos añadir esto a nuestro AndroidManifest.xml


Además, como nuestra aplicación solo funciona si el dispositivo tiene un chip NFC, vamos a indicarlo también en AndroidManifest.xml. De esta manera, hacemos que la aplicación sólo sea compatible con los dispositivos que tengan chip NFC. En caso de que estemos desarrollando una aplicación en la que esta funcionalidad no sea crítica, podemos omitir esta restricción y hacer la comprobación mediante código.


Como hemos dicho, vamos a tener un segundo activity que se encarge de mostrar los mensajes recibidos por Beam, con lo que tenemos que configurarlo para que sea lanzado cuando se reciba el Intent correspondiente a Beam.

            	
	
   	
   	

El tercer parámetro data, sirve para que podamos discriminar hacia quien va dirigido los eventos que lanza Beam.

El aspecto de nuestro manifest queda así




    
        
    

    
        
            
                
                
            
            
        
        
            
                        	
            	
            	
  				
            
            
       	
	    

A continuación vamos a crear los layouts para los dos activities.

El primero es el del activiy principal, en el que se mostrará un EditText en el que escribiremos el mensaje que queremos compartir. El layout queda así:



    
        
        

El segundo layout, contedrá un TextView en el que se mostrará el mensaje recibido y un botón por si queremos responder.



    
        
            
        
    
    
        

A continuación pasamos a implementar la funcionalidad

Empezaremos por el Activity principal. Para que nuestra aplicación soporte NFC, debemos hacer uso de la clase NfcAdapter. Para conseguir una instancia, llamamos al método estático getDefaultAdapter pasando nuestro activity como parámetro de contexto.

NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);

A continuación configuramos el nfcAdapter. El primer trozo de código sirve para que construiamos un objeto NdefMessage que se encarga de encapsular el mensaje que queremos compartir. La clase NdefMessageFactory, es una clase de factoría que más adelante os mostraré. El segundo trozo de código sirve para gestionar cuando se ha producido el envío del mensaje. mHandler es un objeto de tipo Handler que utilizaremos para mostrar un mensaje por pantalla indicando que se ha enviado el mensaje.

nfcAdapter.setNdefPushMessageCallback(new CreateNdefMessageCallback() {
	@Override
	public NdefMessage createNdefMessage(NfcEvent event) {
		return NdefMessageFactory.createNdefMessage(getMessage());
	}
}, this);
nfcAdapter.setOnNdefPushCompleteCallback(new OnNdefPushCompleteCallback() {		
	@Override
	public void onNdefPushComplete(NfcEvent event) {
		mHandler.obtainMessage(MESSAGE_SENT).sendToTarget();
	}
}, this);

Una vez que tenemos configurado el nfcAdapter, sólo nos falta construir un mensaje que compartiremos por Beam. La construcción del objeto la haremos mediante la clase NdefMessageFactory.

Para construir un NdefMessage, debemos llamar a su constructor pasándole como parámetro un array de NfcRecord. Si os acordáis, cuando configuramos el filtro de nuestro activity en el AndroidManifest, teníamos un parámetro «data android:mimeType=»application/com.adictosaltrabajo.tutoriales.android.beam»», pues es aquí donde especificamos que los mensajes que queremos compartir a través de Beam van a ser de ese mismo tipo, así podemos filtrar qué mensajes son capturados por la aplicación.

public class NdefMessageFactory {
	
	private static final String MIMETYPE_BEAMTEXT = "application/com.adictosaltrabajo.tutoriales.android.beam";
	private final static Charset CHARSET_UTF8 = Charset.forName("UTF-8");
	private final static Charset CHARSET_US_ASCII = Charset.forName("US-ASCII");
	
	public static NdefMessage createNdefMessage(String message) {
		final NdefRecord[] records = createNfdRecord(message);
		final NdefMessage ndefMessage = new NdefMessage(records);
        return ndefMessage;
	}
	
	private static NdefRecord[] createNfdRecord(String message) {		
		return new NdefRecord[] {
				createMimeRecord(MIMETYPE_BEAMTEXT, message.getBytes(CHARSET_UTF8))
		};
	}

	public static NdefRecord createMimeRecord(String mimeType, byte[] payload) {
        byte[] mimeBytes = mimeType.getBytes(CHARSET_US_ASCII); //maybe US-ASCII
        return new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
    }

}

Y con esto ya tenemos todo listo para nuestra aplicación.

4. Ejemplo


5. Conclusiones

Aunque ahora mismo, la tecnología NFC en Android no está ampliamente extendida, poco a poco van apareciendo nuevos dispositivos que incorporan esta tecnología, y nosotros con muy poco esfuerzo, podemos ser capaces de añadir funcionalidad extra a nuestras aplicaciones.

Como siempre, si os queréis bajar el proyecto, lo podéis hacer desde aquí y si sólo queréis bajaros la aplicación para probarla vosotros mismos, está aquí

Para cualquier comentario, duda o sugerencia, tenéis el formulario que aparece a continuación.

Un saludo.

2 COMENTARIOS

  1. Gracias Fran.

    Como complemento al artículo diré que la diferencia principal entre esta tecnología y el bluetooth es que consume mucho menos energia debido básicamente a una menor potencia en la velocidad de transferencia y la distancia.

    Tiene utilidades interesantes, por ejemplo acercar el teléfono a un dispositivo lector para pagar un producto, saber cuando vendrá el próximo autobús, etc.

    Un saludo

  2. Hola, gran artículo, muchas felicidades.
    Quizás, como complemento, estaría fantástico algo de código desde un lector al móvil, estilo ACR122 o similar

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad