在Android上,只要NFC标签靠近手机,系统就会向我的应用程序发送一个意图,该意图包含允许我读取和写入此标记的NDEF消息的对象。具体来说,我可以随时随地写这个标签,而它仍然在电话的附近。下面的Java代码给你的印象是我的意思:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Ndef ndef = Ndef.get(tag);
ndef.writeNdefMessage(/* some NDEF data */); // first write
ndef.writeNdefMessage(/* some NDEF data */); // second write
// further writes
ndef.writeNdefMessage(/* some NDEF data */); // n-th write
我可以在 Windows Phone 8.x 上执行相同操作,还是只能对标记执行单个NDEF-message-write操作,然后需要将其置于附近再次(离开射频场并返回标签)?
答案 0 :(得分:3)
我可以多次写入标签而不将其与手机分开并再次点击它。请参阅以下代码:
ProximityDevice device = ProximityDevice.GetDefault();
device.SubscribeForMessage("WriteableTag", WriteableTagHandler);
private void WriteableTagHandler(ProximityDevice sender, ProximityMessage message)
{
var message1= Encoding.Unicode.GetBytes("http://1stUrl.com");
var message2 = Encoding.Unicode.GetBytes("http://secondUrl.com");
sender.PublishBinaryMessage("WindowsUri:WriteTag", message1.AsBuffer(), (s, e) =>
{
s.StopPublishingMessage(e);
sender.PublishBinaryMessage("WindowsUri:WriteTag", message2.AsBuffer(), (se,r)=>
{
se.StopPublishingMessage(r);
});
});
}
修改强>
我刚刚检查了两个设备,实际上,可以多次写入读取而无需再次分离和点击电话。请参阅下面的示例,其中一个设备发送5条消息,另一台设备接收所有消息:
设备1(发件人):
ProximityDevice device = ProximityDevice.GetDefault();
device.DeviceArrived += (e) =>
{
for (int i = 1; i <= 5; i++)
{
e.PublishMessage("Windows.mySubType", "message " + i.ToString(), (s, m) =>
{
s.StopPublishingMessage(m);
});
}
};
设备2(接收方):
ProximityDevice device = ProximityDevice.GetDefault();
device.SubscribeForMessage("Windows.mySubType", (s, e) =>
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(e.DataAsString);
});
});