我正在做一个将 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);
});
});
}
}