2013-05-15 2 views
0

В настоящее время я работаю с некоторыми тегами NFC, которые, как я подтвердил, работают с использованием приложения NFC Interactor, а также с помощью NFC Tag Writer, доступного в Windows Store.Чтение текстовых тегов NDEF в Windows Phone 8

Моя проблема прямо сейчас в том, что приложение, которое я пишу, не может прочитать текст 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 делает обрабатывать ЦНК в качестве подписного типа сообщения, но как это на самом деле обрабатывает сообщение является тайной я ... Я надеялся, что message.DataAsString выполнит трюк, но, похоже, ничего не делает в моем приложении.

мне удалось прочитать данные с помощью другого приложения, и это дает мне необработанную полезную нагрузку

«4e 00 6f 64 00 00 65 00 20 00 31»

который является шестнадцатеричным кодом для «Узла 1», который является текстом, который я написал в теге. Мне интересно, есть ли шестнадцатеричный код ... почему он не может даже показывать цифры? (00 похоже на пользовательский прошивочный код для приложения «NFC Tag Writer» в хранилище Windows)

Переменная messageType возвращает «NDEF» и может отображать ее. Переменная scanned_message возвращает пустую строку.

ответ

0

Самостоятельные решения.

Изменение типа подписки на сообщения типа «Windows» вместо типа «NDEF» позволило API Proximity обрабатывать сообщение изначально.

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. 
+0

Я хочу сделать что-то. но в моем коде message.DataAsString в empty.any идея? – Tom