Condividi tramite


Android Beam

Android Beam è una tecnologia NFC (Near Field Communication) introdotta in Android 4.0 che consente alle applicazioni di condividere informazioni su NFC in prossimità.

Diagramma che illustra due dispositivi nella condivisione di prossimità delle informazioni

Android Beam funziona eseguendo il push dei messaggi su NFC quando due dispositivi sono compresi nell'intervallo. I dispositivi a circa 4 cm l'uno dall'altro possono condividere i dati usando Android Beam. Un'attività in un dispositivo crea un messaggio e specifica un'attività (o attività) che può gestire il push. Quando l'attività specificata è in primo piano e i dispositivi sono compresi nell'intervallo, Android Beam eseguirà il push del messaggio nel secondo dispositivo. Nel dispositivo ricevente viene richiamata una finalità contenente i dati del messaggio.

Android supporta due modi per impostare i messaggi con Android Beam:

  • SetNdefPushMessage - Prima dell'avvio di Android Beam, un'applicazione può chiamare SetNdefPushMessage per specificare un NdefMessage di cui eseguire il push su NFC e l'attività che esegue il push. Questo meccanismo viene usato meglio quando un messaggio non cambia mentre un'applicazione è in uso.

  • SetNdefPushMessageCallback - Quando viene avviato Android Beam, un'applicazione può gestire un callback per creare un NdefMessage. Questo meccanismo consente di ritardare la creazione di messaggi fino a quando i dispositivi non sono compresi nell'intervallo. Supporta scenari in cui il messaggio può variare in base a ciò che accade nell'applicazione.

In entrambi i casi, per inviare dati con Android Beam, un'applicazione invia un NdefMessagepacchetto dei dati in diversi NdefRecords. Esaminiamo i punti chiave che devono essere risolti prima di poter attivare Android Beam. Prima di tutto, si userà lo stile di callback per la creazione di un oggetto NdefMessage.

Creazione di un messaggio

È possibile registrare i callback con un NfcAdapter nel metodo dell'attività OnCreate . Ad esempio, supponendo che un NfcAdapter denominato mNfcAdapter sia dichiarato come variabile di classe nell'attività, è possibile scrivere il codice seguente per creare il callback che creerà il messaggio:

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

L'attività, che implementa NfcAdapter.ICreateNdefMessageCallback, viene passata al SetNdefPushMessageCallback metodo precedente. Quando viene avviato Android Beam, il sistema chiamerà CreateNdefMessage, da cui l'attività può costruire un elemento NdefMessage come illustrato di seguito:

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

Ricezione di un messaggio

Sul lato ricevente, il sistema richiama una finalità con l'azione ActionNdefDiscovered , da cui è possibile estrarre NdefMessage come indicato di seguito:

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