Partager via


Android Beam

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

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

Android Beam fonctionne en transmettant des messages sur NFC lorsque deux appareils sont en plage. Les appareils d’environ 4cm entre eux 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 est au premier plan et que les appareils sont en plage, 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 et l’activité qui l’envoie (push). Ce mécanisme est mieux utilisé lorsqu’un message ne change pas lorsqu’une application est en cours d’utilisation.

  • 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 de messages jusqu’à ce que les appareils soient dans la plage. Il prend en charge les scénarios où 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 une NdefMessage, empaquetage des 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 une NfcAdapter méthode de l’activité OnCreate . Par exemple, en supposant qu’un NfcAdapter nom mNfcAdapter est déclaré en tant que variable de classe dans l’activité, nous pouvons écrire le code suivant pour créer le rappel qui construit 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 élément 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];