Android Beam
Android Beam 是 Android 4.0 中引進的近場通信(NFC)技術,可讓應用程式在接近時透過 NFC 共用資訊。
當兩個裝置在範圍內時,Android Beam 會透過NFC 推送訊息來運作。 彼此約 4cm 的裝置可以使用 Android Beam 共用數據。 一個裝置上的活動會建立訊息,並指定可以處理推送的活動(或活動)。 當指定的 Activity 位於前景且裝置位於範圍內時,Android Beam 會將訊息推送至第二個裝置。 在接收裝置上,會叫用意圖,其中包含訊息數據。
Android 支援使用 Android Beam 設定訊息的兩種方式:
SetNdefPushMessage
- 在起始 Android Beam 之前,應用程式可以呼叫 SetNdefPushMessage 來指定要推送至 NFC 的 NdefMessage,以及推送它的活動。 當應用程式正在使用時,訊息不會變更時,最適合使用此機制。SetNdefPushMessageCallback
- 起始 Android Beam 時,應用程式可以處理回呼以建立 NdefMessage。 此機制可讓訊息建立延遲,直到裝置處於範圍內為止。 它支援訊息可能會根據應用程式中發生的情況而有所不同的案例。
在任一情況下,若要使用 Android Beam 傳送數據,應用程式會傳送 NdefMessage
,以數 NdefRecords
個 封裝數據。 讓我們看看觸發 Android Beam 之前,必須先解決的關鍵點。 首先,我們將使用建立 NdefMessage
的回呼樣式。
建立訊息
我們可以在 Activity OnCreate
的 方法中向 NfcAdapter
註冊回呼。 例如,假設 NfcAdapter
具名 mNfcAdapter
宣告為 Activity 中的類別變數,我們可以撰寫下列程式代碼來建立將建構訊息的回呼:
mNfcAdapter = NfcAdapter.GetDefaultAdapter (this);
mNfcAdapter.SetNdefPushMessageCallback (this, this);
實作 NfcAdapter.ICreateNdefMessageCallback
的活動會傳遞至 SetNdefPushMessageCallback
上述方法。 起始 Android Beam 時,系統會呼叫 CreateNdefMessage
,活動可以從中建構 NdefMessage
,如下所示:
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;
}
接收訊息
在接收端,系統會使用 動作叫用 ActionNdefDiscovered
Intent,我們可以從中擷取 NdefMessage,如下所示:
IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];