在Windows Phone 8中读取NDEF-Text标签
本文关键字:读取 NDEF-Text 标签 Windows Phone | 更新日期: 2023-09-27 18:13:37
我目前正在使用一些NFC标签,我已经确认使用NFC交互器应用程序以及Windows商店中可用的NFC标签编写器。
我现在的问题是我正在编写的应用程序无法读取标签中包含的NDEF文本,但手机检测到它很好,打开一些WP8版本的记事本来显示文本。
我真正需要做的就是让NFC标签中包含的文本显示在我的应用程序页面上,但无论我尝试什么,它似乎都不起作用。
我已经调查了这个问题一点,我已经找到了"NDEF库接近API"解析NDEF消息,但它似乎是接收简单的文本…是吗?
我的代码如下: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作为一个订阅的消息类型,但它实际上如何处理消息对我来说是一个谜…我希望听到这个消息。DataAsString本来可以做到这一点,但它似乎在我的应用程序中没有做任何事情。
我已经设法使用另一个应用程序读取数据,它确实给了我原始有效载荷
"4e 00 6f 00 64 00 65 00 2000 31"
是"节点1"的十六进制代码,这是我在标签中写的文本。我想知道的是十六进制代码是否存在……为什么连数字都不能显示?(00似乎是应用程序"NFC Tag Writer"在Windows商店中的自定义间隔代码)
messageType变量返回"NDEF"并可以显示它。scanned_message变量返回一个空字符串。
自行解决。
将消息订阅类型更改为"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.