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