我正在执行将NFCTagReader实现到xamarin.ios应用程序中的POC。
https://developer.xamarin.com/samples/monotouch/ios11/NFCTagReader/
我已经从xamarin网站上获取了NFCTagReader,并设置了所有适当的设置设置以访问标签读取器。问题是,当我单击扫描时,如预期的那样弹出“准备扫描”窗口,然后我扫描标签,它在屏幕上显示小勾号,表明找到了它,但从未中断过我代码中的DidDetect方法代表。它将点击DidInvalidate方法,并提供ReaderSessionInvalidationErrorUserCanceled的代码。
任何想法我所缺少的。以下是我的代码段:
partial void Scan(UIBarButtonItem sender)
{
InvokeOnMainThread(() =>
{
Session = new NFCNdefReaderSession(this, null, true);
if (Session != null)
{
Session.BeginSession();
}
});
}
#endregion
#region NFCNDEFReaderSessionDelegate
public void DidDetect(NFCNdefReaderSession session, NFCNdefMessage[] messages)
{
foreach (NFCNdefMessage msg in messages)
{
DetectedMessages.Add(msg);
}
DispatchQueue.MainQueue.DispatchAsync(() =>
{
this.TableView.ReloadData();
});
}
public void DidInvalidate(NFCNdefReaderSession session, NSError error)
{
var readerError = (NFCReaderError)(long)error.Code;
if (readerError != NFCReaderError.ReaderSessionInvalidationErrorFirstNDEFTagRead &&
readerError != NFCReaderError.ReaderSessionInvalidationErrorUserCanceled)
{
InvokeOnMainThread(() =>
{
var alertController = UIAlertController.Create("Session Invalidated", error.LocalizedDescription, UIAlertControllerStyle.Alert);
alertController.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));
DispatchQueue.MainQueue.DispatchAsync(() =>
{
this.PresentViewController(alertController, true, null);
});
});
}
}
最佳答案
有点白肤金发的时刻,只是要结束这个问题,但以防万一有人遇到与我相同的问题,我会回答这个问题。
问题最终是由给我的标签是空白的事实引起的。因此,电话在检测到标签时会单击,但永远不会点击didDetect方法。当我使用Android标签编写器应用程序向NFC标签编写内容后,DidDetect就会按预期触发。