【问题标题】:Write NDEF message multiple times to same tag?多次将 NDEF 消息写入同一个标签?
【发布时间】:2013-11-13 14:42:16
【问题描述】:

在 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 操作,然后需要将其靠近再次(离开射频场并带着标签回来)?

【问题讨论】:

    标签: android windows-phone-8 nfc ndef


    【解决方案1】:

    我可以多次写入标签,而无需将其与手机分开并再次点击它。例如看下面的代码:

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

    【讨论】:

    • @Christian 对我的 anderZubi 的评论 - 现在因为证明是错误的而被删除 - 答案:太好了,谢谢你帮助迷路的人。还有一件事:只考虑一部手机和一个标签:你也可以读/写多次吗? (不只是像你的例子那样多次写入,还要在中间读取?)
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多