如何从Windows Phone 8中的Nfc标签读取多个Ndef文本记录

时间:2014-09-04 09:43:05

标签: c# windows-phone-8 nfc

我正在开发关于nfc标签的windows phone应用程序,我可以写出所有四种类型为NdefTextRecord的记录。发布它没有问题。主要问题是在阅读NDEF消息时我无法读取任何我发布的记录。我想阅读所有四条记录,但阅读时却什么都没读。    以下是两个发布消息的代码。

        public void ApplicationBarIconButton_Click(object sender, System.EventArgs e)
    {

        var fRecord = new NdefTextRecord{Text = TxtFloor.Text , LanguageCode = "en-US" };
        var zRecord = new NdefTextRecord { Text = TxtZone.Text, LanguageCode = "en-US" };
        var latRecord = new NdefTextRecord { Text = LatitudeTextBlock.Text, LanguageCode = "en-US" };
        var longRecord = new NdefTextRecord { Text = LongitudeTextBlock.Text, LanguageCode = "en-US" };

        var msg = new NdefMessage {};
        msg.Add(fRecord);
        msg.Add(zRecord);
        msg.Add(latRecord);
        msg.Add(longRecord);

        _device.PublishBinaryMessage(
            "NDEF:WriteTag",
            msg.ToByteArray().AsBuffer(),
            MessageWrittenHandler);

        SetStatusOutput("Message written");
        }

下面是订阅

的代码
private void InitializeProximityDevice()
    {
        _device = Windows.Networking.Proximity.ProximityDevice.GetDefault();
        if (_device != null)
        {
            _subscriptionIdNdef = _device.SubscribeForMessage("NDEF", MessageReceivedHandler);

        }

    }

        private void MessageReceivedHandler(ProximityDevice sender, ProximityMessage message)
    {

        var rawMsg = message.Data.ToArray();
        var ndefMessage = NdefMessage.FromByteArray(rawMsg);


        // Loop over all records contained in the NDEF message
        foreach (NdefRecord record in ndefMessage)
        {

            if (NdefTextRecord.IsRecordType(record))
            {
                // Convert and extract URI info
                var textRecord = new NdefTextRecord(record);
                var str = textRecord;


                //SetLogStatus();


            }

2 个答案:

答案 0 :(得分:0)

您的读取代码是否已进入foreach语句但未通过类型检查?尝试

foreach (NdefRecord record in ndefMessage) {
    var recordType = record.CheckSpecializedType(false);

    if (recordType == typeof(NdefTextRecord)) {
    // ...
    }
}

答案 1 :(得分:0)

Windows Phone仅读取并处理邮件的第一条记录。存储在标记上的所有其他记录都将被忽略。如果操作系统无法理解消息中的第一条记录,则忽略该标记。

请参阅:Multiple Records on Tags