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.
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.