Android Beam

Android Beam ha aparecido con Android 4.0 y nos permite el intercambio de información a través del chip NFC. Veremos como hacer uso de esta tecnología fácilmente creando una aplicación en la que pasaremos un mensaje de texto de un dispositivo a otro.

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.

Comentarios

2 respuestas

  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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

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

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

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos.

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

22/06/2026

Juan Antonio Jiménez Torres

Vamos a instrumentalizar un SDD para un microservicio bancario. En este artículo sobre SDD - Spec Driven Development, instrumentalizado sobre OpenSpec vamos a construir una PoC de algo más serio que una tabla periódica. Un microservicio bancario muy simplificado que gestione cuentas y permita hacer transferencias

16/06/2026

Juan Antonio Jiménez Torres

Este es el segundo artículo sobre SDD, Spec Driven Development, instrumentalizado sobre OpenSpec. Pero esta vez nos acercaremos usando softwere gratuito. Por un lado OpenCode en lugar de ClaudeCode y usando el modelo gratuito Gemma4 de Google en lugar de otros de pago.

08/06/2026

Juan Antonio Jiménez Torres

Aprenderemos sobre SDD – Spec Driven Development instrumentalizado sobre OpenSpec. Haremos un primer acercamiento usando ClaudeCode con Sonnet, para luego, en un artículo posterior pasarnos a la versión gratuita de OpenCode con Gemma4