【发布时间】:2018-01-30 23:19:33
【问题描述】:
我正在做一个将 NFCTagReader 实现到 xamarin.ios 应用程序中的 POC。
https://developer.xamarin.com/samples/monotouch/ios11/NFCTagReader/
我已从 xamarin 站点获取 NFCTagReader,并设置了所有适当的配置设置以访问标签阅读器。问题是,当我单击扫描时,会按预期弹出“准备扫描”窗口,然后我扫描一个标签,它会在屏幕上显示小勾号以表明它已找到,但它永远不会闯入我的代码的 DidDetect 方法代表。它将命中 DidInvalidate 方法并给出 ReaderSessionInvalidationErrorUserCanceled 的代码。
我缺少的任何想法。以下是我的代码 sn-p:
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);
});
});
}
}
【问题讨论】:
-
您使用的是什么设备,因为它需要运行 iOS 11 的 iPhone 7、7 Plus、8、8 Plus 或 X?另外,我会再检查一次Xamarin docs,以确保您的测试设置符合所有限制并且配置正确。
-
您找到解决方案了吗?在我的情况下,它也显示了它的工作原理,但它从未命中 didinvalidate 或 diddetect。
标签: ios xamarin xamarin.ios nfc core-nfc