4

在 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 操作,然后需要再次接近它(离开射频场并返回标签)?

4

1 回答 1

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);
            });
    });
于 2013-11-13T16:46:07.990 回答