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.

Diagram znázorňující dvě zařízení v informacích o sdílení blízké 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ý NfcAdaptermNfcAdapter 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];