我正在开发一个针对Android和iOS的Xamarin Forms PCL项目,该项目需要一些基本的条形码扫描功能。
我在ZXing.Net.Mobile之后使用this tutorial包的表单版本并引用了this guide,并在Android上运行良好。但是,在iOS上相机出现但OnScanResult
事件从未被触发。
我在几个运行几个不同版本(从8.0到10.3的任何地方)的iOS设备上进行了测试,并摆弄了我能想到的一切,并参考了他们的示例项目。所有项目都安装了ZXing.Net.Mobile
和ZXing.Net.Mobile.Forms
个nuget包。
这是我的扫描仪代码,通过我的主页上的按钮按下触发:
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) =>
{
scanPage.IsScanning = false;
Device.BeginInvokeOnMainThread(async () =>
{
await Navigation.PopAsync();
await DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
await Navigation.PushAsync(scanPage);
和AppDelegate.cs:
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
global::ZXing.Net.Mobile.Forms.iOS.Platform.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}
经过两天的战斗,我觉得自己已经结束了。有没有其他人遇到类似的问题?谢谢你的指导!
修改1
这是单击按钮以触发上述代码时的设备日志输出(仅限消息列)。摄像机打开并指向各种条形码时,不会添加任何日志项。我在这里看不到任何可疑的东西,但也许其他人呢?
修改2
我从github repo运行了样本Xamarin Forms PCL,并且在iOS上遇到相同的问题,相机打开正常,但没有读过条形码。因此,我认为问题必须与我的Visual Studio和/或Xamarin设置有关。我在稳定的Xamarin频道上运行Visual Studio 2015社区。 p>
答案 0 :(得分:0)
add this on ios
protected override void OnAppearing()
{
base.OnAppearing();
qrcode.IsScanning = true;
}`enter code here`
protected override void OnDisappearing()
{
qrcode.IsScanning = false;
base.OnDisappearing();
}
答案 1 :(得分:0)
我终于以this project作为起点。这只是使用ZXing的基本条形码扫描实现,但无论出于何种原因,我终于可以在iOS上阅读条形码。
这可能与版本相关,但我无法缩小范围。
修改强>
我在Xamarin论坛中发布了同样的问题:https://forums.xamarin.com/discussion/comment/272209#Comment_272209
似乎答案是降级到ZXing版本2.1.47。我几个月没有对图书馆做过任何工作,所以我没有测试新版本。
答案 2 :(得分:0)
尝试使用:
scanPage.IsAnalyzing = true;
答案 3 :(得分:-1)
IsAnalyzing
与IsScanning
不同。
我遇到了和你一样的问题。但在使用IsAnalyzing = true;
之后它已修复。