Android Beam

Android Beam est une technologie NFC (Near Field Communication) introduite dans Android 4.0 qui permet aux applications de partager des informations via NFC lorsqu’elles sont proches.

Diagramme illustrant deux appareils dans des informations de partage de proximité étroite

Android Beam fonctionne en push de messages via NFC lorsque deux appareils sont à portée. Les appareils à environ 4 cm les uns des autres peuvent partager des données à l’aide d’Android Beam. Une activité sur un appareil crée un message et spécifie une activité (ou des activités) qui peut gérer le push. Lorsque l’activité spécifiée se trouve au premier plan et que les appareils sont à portée, Android Beam envoie le message au deuxième appareil. Sur l’appareil de réception, une intention est appelée contenant les données du message.

Android prend en charge deux façons de définir des messages avec Android Beam :

  • SetNdefPushMessage - Avant le lancement d’Android Beam, une application peut appeler SetNdefPushMessage pour spécifier un NdefMessage à envoyer (push) sur NFC, ainsi que l’activité qui le pousse. Ce mécanisme est mieux utilisé lorsqu’un message ne change pas pendant l’utilisation d’une application.

  • SetNdefPushMessageCallback - Quand Android Beam est lancé, une application peut gérer un rappel pour créer un NdefMessage. Ce mécanisme permet de retarder la création des messages jusqu’à ce que les appareils soient dans la plage. Il prend en charge les scénarios dans lesquels le message peut varier en fonction de ce qui se passe dans l’application.

Dans les deux cas, pour envoyer des données avec Android Beam, une application envoie un NdefMessage, empaquetant les données dans plusieurs NdefRecords. Examinons les points clés qui doivent être traités avant de pouvoir déclencher Android Beam. Tout d’abord, nous allons utiliser le style de rappel de création d’un NdefMessage.

Création d’un message

Nous pouvons inscrire des rappels avec un NfcAdapter dans la méthode de l’activité OnCreate . Par exemple, en supposant qu’un NfcAdapter nommé mNfcAdapter soit déclaré en tant que variable de classe dans l’activité, nous pouvons écrire le code suivant pour créer le rappel qui va construire le message :

mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);

L’activité, qui implémente NfcAdapter.ICreateNdefMessageCallback, est passée à la SetNdefPushMessageCallback méthode ci-dessus. Lorsque Android Beam est lancé, le système appelle CreateNdefMessage, à partir duquel l’activité peut construire un NdefMessage comme indiqué ci-dessous :

public NdefMessage CreateNdefMessage (NfcEvent evt)
{
    DateTime time = DateTime.Now;
    var text = ("Beam me up!\n\n" + "Beam Time: " +
        time.ToString ("HH:mm:ss"));
    NdefMessage msg = new NdefMessage (
        new NdefRecord[]{ CreateMimeRecord (
            "application/com.example.android.beam",
            Encoding.UTF8.GetBytes (text)) });
        } };
    return msg;
}

public NdefRecord CreateMimeRecord (String mimeType, byte [] payload)
{
    byte [] mimeBytes = Encoding.UTF8.GetBytes (mimeType);
    NdefRecord mimeRecord = new NdefRecord (
        NdefRecord.TnfMimeMedia, mimeBytes, new byte [0], payload);
    return mimeRecord;
}

Réception d’un message

Côté réception, le système appelle une intention avec l’action ActionNdefDiscovered , à partir de laquelle nous pouvons extraire le NdefMessage comme suit :

IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];

Pour obtenir un exemple de code complet qui utilise Android Beam, illustré dans la capture d’écran ci-dessous, consultez la démonstration Android Beam dans l’exemple de galerie.

Exemples de captures d’écran de la démonstration Android Beam