【问题标题】:Reading NDEF-Text tags in Windows Phone 8在 Windows Phone 8 中读取 NDEF-Text 标签
【发布时间】:2013-05-10 05:57:06
【问题描述】:

我目前正在使用一些 NFC 标签,我已确认这些标签可以使用 NFC 交互器应用程序以及 Windows 应用商店中提供的 NFC 标签写入器。

我现在的问题是我正在编写的应用程序无法读取标签中包含的 NDEF 文本,但手机检测到它很好,打开一些 WP8 版本的记事本来显示文本。

我真正需要做的就是让 NFC 标签中包含的文本显示在我的应用页面上,但无论我尝试什么,它似乎都不起作用。

我对这个问题进行了一些调查,并找到了用于解析 NDEF 消息的“NDEF Library for Proximity API”,但接收简单文本似乎有点过头了......或者是吗?

我的代码如下:

private void messageReceived(ProximityDevice sender, ProximityMessage message)
    {
        var scanned_message = message.DataAsString;
        var messageType = message.MessageType;

        //message received handler. 
        Dispatcher.BeginInvoke(() =>
            {
                if (proximityDevice != null)
                {

                    locationdisplay.Text = "Tag found! Scanning...";
                    proximityDevice.StopSubscribingForMessage(Id);
                    locationdisplay.Text = "Type = " + messageType + "\nMessage = " + scanned_message;

                }

            });

    }

我知道 Windows.Networking.Proximity API 确实将 NDEF 作为订阅的消息类型处理,但它实际上如何处理消息对我来说是个谜……我希望 message.DataAsString 有成功了,但它似乎在我的应用程序中没有做任何事情。

我已经设法使用另一个应用程序读取数据,它确实为我提供了原始有效负载

“4e 00 6f 00 64 00 65 00 20 00 31”

这是“节点 1”的十六进制代码,这是我在标签中写的文本。我想知道是否存在十六进制代码......为什么它甚至不能显示数字? (00 似乎是 Windows 应用商店中“NFC Tag Writer”应用的自定义间隔代码)

messageType 变量返回“NDEF”并可以显示。 scanned_message 变量返回一个空字符串。

【问题讨论】:

    标签: c# windows-phone-8 nfc ndef


    【解决方案1】:

    自行解决。

    将消息订阅类型更改为“Windows”类型而不是“NDEF”类型允许 Proximity API 以本机方式处理消息。

    private void SubscribeForMessage()
            {
                Id = proximityDevice.SubscribeForMessage("WindowsMime", messageReceived);
            }
    private void messageReceived(ProximityDevice sender, ProximityMessage message)
    {
                var buffer = message.Data.ToArray();
                int mimesize = 0;
                //search first '\0' charactere
                for (mimesize = 0; mimesize < 256 && buffer[mimesize] != 0; ++mimesize)
                {
                };
    
                //extract mimetype
                var messageType = Encoding.UTF8.GetString(buffer, 0, mimesize);
    
                //convert data to string. This depends on mimetype value.
                var scanned_message = Encoding.UTF8.GetString(buffer, 256, buffer.Length - 256);
    
                    Dispatcher.BeginInvoke(() =>
                        {
                            if (proximityDevice != null)
                            {
                                proximityDevice.StopSubscribingForMessage(Id);
                                locationdisplay.Text = scanned_message;
    
                            }
                        });
    }
    
    
    // For the code to work, I added 
    // using System.Runtime.InteropServices.WindowsRuntime;
    // for access to the ToArray() and AsBuffer() 
    // functions to Read/Write respectively.
    

    【讨论】:

    • 我想做同样的事情。但在我的代码 message.DataAsString 在 empty.any 想法?
    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多