2013-11-13 9 views
4

На Android, как только тег NFC будет находиться рядом с телефоном, система отправляет намерение моему приложению, которое содержит объекты, которые позволяют мне читать и записывать сообщение NDEF этого тега. В частности, я могу писать этот тег так часто, как хочу, пока он все еще находится в непосредственной близости от телефона. Код Java ниже дает вам представление о том, что я имею в виду:Записывать сообщение NDEF несколько раз в тот же тег?

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, или я могу только выполнять операцию одного ЦНК-сообщение-запись в тег, а затем снова нужно снова подключить его (сдвиньте RF-поле и вернитесь вместе с тегом)?

ответ

3

Я могу писать в тег более одного раза, не отделяя его от телефона и не постукивая его снова. См следующий код, например:

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

EDIT:

Я только что проверил с двумя устройствами, а на самом деле, можно писать-читать больше, чем один раз без разделения и снова нажав телефоны , Смотрите пример ниже, где одно устройство посылает 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); 
      }); 
    }); 
+0

Комментарий @Christian to anderZubi на моем - теперь удалено, потому что доказано неправильно - ответ: Отлично, спасибо, что помогает проиграть. Еще одна вещь: учитывая только телефон и тег: можете ли вы также читать/писать несколько раз? (а не просто писать несколько раз, как в вашем примере, но также читать inbetween?) –

Смежные вопросы