Android Beam

Android Beam, Uygulamaların yakın mesafedeyken NFC üzerinden bilgi paylaşmasına olanak tanıyan, Android 4.0'da kullanıma sunulan bir Yakın Alan İletişimi (NFC) teknolojisidir.

Yakın paylaşım bilgilerindeki iki cihazı gösteren diyagram

Android Beam, iki cihaz aralıkta olduğunda NFC üzerinden ileti göndererek çalışır. Birbirinden yaklaşık 4 cm'lik cihazlar Android Beam kullanarak veri paylaşabilir. Bir cihazdaki Etkinlik bir ileti oluşturur ve göndermeyi işleyebilen bir Etkinlik (veya Etkinlikler) belirtir. Belirtilen Etkinlik ön planda olduğunda ve cihazlar aralıkta olduğunda, Android Beam iletiyi ikinci cihaza iletir. Alıcı cihazda, ileti verilerini içeren bir Intent çağrılır.

Android, Android Beam ile iletileri ayarlamanın iki yolunu destekler:

  • SetNdefPushMessage - Android Beam başlatılmadan önce bir uygulama SetNdefPushMessage'ı çağırarak NFC üzerinden gönderim için bir NdefMessage ve onu gönderen Etkinliği belirtebilir. Bu mekanizma, bir uygulama kullanımdayken ileti değişmediğinde en iyi şekilde kullanılır.

  • SetNdefPushMessageCallback - Android Beam başlatıldığında, bir uygulama ndefMessage oluşturmak için geri çağırmayı işleyebilir. Bu mekanizma, cihazlar aralığa gelene kadar ileti oluşturma işleminin geciktirilmesine olanak tanır. İletinin uygulamada olup bitenlere göre değişebileceği senaryoları destekler.

Her iki durumda da, Android Beam ile veri göndermek için bir uygulama gönderir NdefMessageve verileri birkaç NdefRecordsiçinde paketler. Android Beam'i tetikleyebilmeniz için önce ele alınması gereken önemli noktalara göz atalım. İlk olarak, oluşturma NdefMessageişleminin geri çağırma stiliyle çalışacağız.

İleti Oluşturma

Geri çağırmaları Etkinliğin OnCreate yönteminde ile NfcAdapter kaydedebiliriz. Örneğin, bir NfcAdapter adlandırılmış öğesinin mNfcAdapter Activity içinde sınıf değişkeni olarak bildirildiğini varsayarsak, iletiyi oluşturacak geri çağırmayı oluşturmak için aşağıdaki kodu yazabiliriz:

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

uygulayan NfcAdapter.ICreateNdefMessageCallbackActivity yukarıdaki yönteme SetNdefPushMessageCallback geçirilir. Android Beam başlatıldığında, sistem aşağıda gösterildiği gibi Etkinliğin bir NdefMessage oluşturabileceği öğesini çağırırCreateNdefMessage:

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

İleti Alma

Alan tarafında sistem, NdefMessage'ı aşağıdaki gibi ayıklayabileceğiniz eylemiyle ActionNdefDiscovered bir Intent çağırır:

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