Android Beam
Android Beam je technologie NFC (Near Field Communication) představená v Androidu 4.0, která umožňuje aplikacím sdílet informace přes NFC v blízkosti.
Android Beam funguje tak, že odesílá zprávy přes NFC, když jsou dvě zařízení v dosahu. Zařízení o 4 cm od sebe mohou sdílet data pomocí Android Beam. Aktivita na jednom zařízení vytvoří zprávu a určuje aktivitu (nebo aktivity), která ji může zpracovat. Pokud je zadaná aktivita v popředí a zařízení jsou v rozsahu, Android Beam odešle zprávu do druhého zařízení. Na přijímajícím zařízení se vyvolá záměr obsahující data zprávy.
Android podporuje dva způsoby nastavení zpráv pomocí Android Beamu:
SetNdefPushMessage
- Před zahájením Android Beam může aplikace volat SetNdefPushMessage určit NdefMessage pro nasdílení přes NFC a aktivitu, která ji nasdílí. Tento mechanismus se nejlépe používá, když se zpráva nezmění, když se aplikace používá.SetNdefPushMessageCallback
- Když je android Beam inicializován, aplikace může zpracovat zpětné volání k vytvoření NdefMessage. Tento mechanismus umožňuje, aby vytváření zpráv bylo zpožděné, dokud zařízení nejsou v dosahu. Podporuje scénáře, ve kterých se zpráva může lišit v závislosti na tom, co se v aplikaci děje.
V obou případech odešle data pomocí Android Beam, aplikace odešle NdefMessage
, balení dat v několika NdefRecords
. Pojďme se podívat na klíčové body, které je potřeba vyřešit, než můžeme aktivovat Android Beam. Nejprve budeme pracovat se stylem zpětného volání vytvoření objektu NdefMessage
.
Vytvoření zprávy
Zpětné volání můžeme zaregistrovat pomocí NfcAdapter
metody aktivity OnCreate
. Například za předpokladu, že pojmenovaný NfcAdapter
mNfcAdapter
je deklarován jako proměnná třídy v aktivitě, můžeme napsat následující kód pro vytvoření zpětného volání, který vytvoří zprávu:
mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);
Aktivita, která implementuje NfcAdapter.ICreateNdefMessageCallback
, je předána SetNdefPushMessageCallback
metodě výše. Při zahájení Android Beam bude systém volat CreateNdefMessage
, ze kterého může aktivita vytvořit, NdefMessage
jak je znázorněno níže:
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;
}
Příjem zprávy
Na straně příjmu systém vyvolá záměr s ActionNdefDiscovered
akcí, ze které můžeme extrahovat NdefMessage následujícím způsobem:
IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];