Udostępnij za pośrednictwem


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.

Diagram przedstawiający dwa urządzenia w bliskim sąsiedztwie informacji o udostępnianiu

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 NdefRecordselementach . 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.ICreateNdefMessageCallbackmetodę , jest przekazywane do powyższej SetNdefPushMessageCallback metody. Po zainicjowaniu beam systemu Android system wywoła CreateNdefMessagemetodę , 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];