Android Beam

Android Beam ist eine NFC-Technologie (Near Field Communication), die in Android 4.0 eingeführt wurde und die es Anwendungen ermöglicht, Informationen über NFC auszutauschen, wenn unmittelbare Nähe gegeben ist.

Diagramm zur Veranschaulichung von zwei Geräten in unmittelbarer Nähe zum Teilen von Informationen

Android Beam funktioniert, indem Nachrichten über NFC übertragen werden, wenn zwei Geräte in Reichweite sind. Geräte, die ca. 4 cm voneinander entfernt sind, können über Android Beam Daten austauschen. Eine Aktivität auf einem Gerät erstellt eine Nachricht und gibt eine Aktivität (oder Aktivitäten) an, die in der Lage ist, die Nachricht zu senden. Wenn sich die angegebene Aktivität im Vordergrund befindet und die Geräte in Reichweite sind, sendet Android Beam die Nachricht an das zweite Gerät. Auf dem empfangenden Gerät wird ein Intent-Objekt aufgerufen, das die Nachrichtendaten enthält.

Android unterstützt zwei Arten, Nachrichten mit Android Beam festzulegen:

  • SetNdefPushMessage: Bevor Android-Beam gestartet wird, kann eine Anwendung „SetNdefPushMessage“ aufrufen, um eine „NdefMessage“-Nachricht, die über NFC gesendet werden soll, und die Aktivität anzugeben, von der die Nachricht gesendet wird. Dieser Mechanismus wird am besten verwendet, wenn sich eine Nachricht nicht ändert, während eine Anwendung genutzt wird.

  • SetNdefPushMessageCallback: Wenn Android Beam gestartet wird, kann eine Anwendung einen Rückruf verarbeiten, um eine „NdefMessage“-Nachricht zu erstellen. Dieser Mechanismus ermöglicht es, die Erstellung von Nachrichten zu verzögern, bis sich die Geräte in Reichweite befinden. Hiermit werden Szenarien unterstützt, in denen die Nachricht je nach dem, was in der Anwendung geschieht, variieren kann.

In beiden Fällen sendet eine Anwendung, damit Daten mit Android Beam gesendet werden können, eine NdefMessage-Nachricht, wobei die Daten in mehrere NdefRecords verpackt sind. Es folgen die wichtigsten Punkte, die erfüllt sein müssen, bevor Android Beam ausgelöst werden kann. Zunächst soll das Erstellen einer NdefMessage-Nachricht mit der Rückrufmethode erfolgen.

Erstellen einer Nachricht

Rückrufe können mit einem NfcAdapter-Objekt in der OnCreate-Methode der Aktivität registriert werden. Angenommen, ein NfcAdapter-Objekt namens mNfcAdapter ist als Klassenvariable in der Aktivität deklariert. Dann kann der folgende Code geschrieben werden, um den Rückruf zu erstellen, der die Nachricht erstellt:

mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);

Die-Aktivität, in der NfcAdapter.ICreateNdefMessageCallback implementiert ist, wird an die obige SetNdefPushMessageCallback-Methode übergeben. Wenn Android Beam gestartet wird, ruft das System die CreateNdefMessage-Methode auf, aus der die Aktivität eine NdefMessage-Nachricht erstellen kann, wie nachstehend gezeigt:

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;
}

Empfangen einer Nachricht

Auf der empfangenden Seite ruft das System ein Intent-Objekt mit der ActionNdefDiscovered-Aktion auf, aus der die „NdefMessage“-Nachricht wie folgt extrahiert werden kann:

IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];

Ein umfassendes Codebeispiel, in dem Android Beam verwendet wird und dessen Ergebnis im folgenden Screenshot gezeigt ist, finden Sie in der Android Beam-Demo im Beispielkatalog.

Beispielscreenshots aus der Android Beam-Demo