Android 无线发送
Android Beam 是 Android 4.0 中引入的近场通信 (NFC) 技术,允许应用程序在紧密邻近时通过 NFC 共享信息。
Android Beam 的工作原理是,当两台设备在范围内时,通过 NFC 推送消息。 彼此相距约 4cm 的两台设备可以使用 Android Beam 共享数据。 一台设备上的活动创建消息,并指定一个或多个可以处理消息推送的活动。 如果指定的活动位于前台,且两台设备处于范围内,Android Beam 就会将消息推送到第二台设备。 接收设备上会调用包含消息数据的意向。
Android 支持通过两种方式来设置使用 Android Beam 推送消息:
SetNdefPushMessage
- 在 Android Beam 启动前,应用程序可以调用 SetNdefPushMessage,以指定要通过 NFC 推送的 NdefMessage,以及推送消息的活动。 此机制最适用于在应用程序使用时消息未更改的情况。SetNdefPushMessageCallback
- 在 Android Beam 启动后,应用程序可以处理回拨来创建 NdefMessage。 此机制允许延迟到两台设备处于范围内时创建消息。 它支持消息可能根据应用程序中的操作而变化的方案。
无论是哪种方式,为了使用 Android Beam 发送数据,应用程序会发送 NdefMessage
,同时将数据打包到多个 NdefRecords
中。 接下来看看在能够触发 Android Beam 前必须处理的要点。 首先,需要使用创建 NdefMessage
的回拨样式。
创建消息
可以在活动的 OnCreate
方法中使用 NfcAdapter
注册回拨。 例如,假设名为 mNfcAdapter
的 NfcAdapter
在活动中声明为类变量,可以编写下面的代码,以创建用于构造消息的回拨:
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
操作调用意向,可以从中提取 NdefMessage,如下所示:
IParcelable [] rawMsgs = intent.GetParcelableArrayExtra (NfcAdapter.ExtraNdefMessages);
NdefMessage msg = (NdefMessage) rawMsgs [0];