Android Beam
Android Beam to technologia NFC (Near Field Communication) wprowadzona w systemie Android 4.0, która umożliwia aplikacjom udostępnianie informacji za pośrednictwem nfc w pobliżu.
System Android Beam działa przez wypychanie komunikatów za pośrednictwem komunikacji NFC, gdy dwa urządzenia są w zasięgu. Urządzenia o długości około 4 cm od siebie mogą udostępniać dane przy użyciu usługi Android Beam. Działanie na jednym urządzeniu tworzy komunikat i określa działanie (lub działania), które może obsługiwać wypychanie. Gdy określone działanie znajduje się na pierwszym planie, a urządzenia znajdują się w zasięgu, usługa Android Beam wypchnie komunikat do drugiego urządzenia. Na urządzeniu odbierającym wywoływana jest intencja zawierająca dane komunikatu.
System Android obsługuje dwa sposoby ustawiania komunikatów za pomocą usługi Android Beam:
SetNdefPushMessage
- Przed zainicjowaniem śledzenia systemu Android aplikacja może wywołać funkcję SetNdefPushMessage, aby określić komunikat NdefMessage do wypychania nfc i działanie, które go wypycha. Ten mechanizm najlepiej używać, gdy komunikat nie zmienia się, gdy aplikacja jest używana.SetNdefPushMessageCallback
— Po zainicjowaniu beam systemu Android aplikacja może obsłużyć wywołanie zwrotne w celu utworzenia NdefMessage. Ten mechanizm umożliwia opóźnienie tworzenia komunikatów, dopóki urządzenia nie będą w zasięgu. Obsługuje scenariusze, w których komunikat może się różnić w zależności od tego, co dzieje się w aplikacji.
W obu przypadkach, aby wysłać dane za pomocą usługi Android Beam, aplikacja wysyła element NdefMessage
, pakujący dane w kilku NdefRecords
elementach . Przyjrzyjmy się kluczowym punktom, które należy rozwiązać, zanim będziemy mogli wyzwolić usługę Android Beam. Najpierw będziemy pracować z stylem wywołania zwrotnego podczas tworzenia obiektu NdefMessage
.
Tworzenie komunikatu
Możemy zarejestrować wywołania zwrotne za pomocą NfcAdapter
metody Działania OnCreate
. Na przykład przy założeniu, że NfcAdapter
nazwana mNfcAdapter
jest zadeklarowana jako zmienna klasy w działaniu, możemy napisać następujący kod, aby utworzyć wywołanie zwrotne, które skonstruuje komunikat:
mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);
Działanie, które implementuje NfcAdapter.ICreateNdefMessageCallback
metodę , jest przekazywane do powyższej SetNdefPushMessageCallback
metody. Po zainicjowaniu beam systemu Android system wywoła CreateNdefMessage
metodę , z której działanie może utworzyć NdefMessage
element , jak pokazano poniżej:
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;
}
Odbieranie komunikatu
Po stronie odbieranej system wywołuje intencję z ActionNdefDiscovered
akcją , z której można wyodrębnić NdefMessage w następujący sposób:
IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];