[英]Xamarin Forms - Zxing QR Scanner - How can you toggle the camera being used?
[英]Xamarin Forms - Multiple ZXing windows being created
我在名为QRPage.xaml.cs
的Xamarin Forms页面中有一个函数,该函数使用ZXing打开QR码阅读器
protected override async void OnAppearing()
{
base.OnAppearing();
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
// Navigate to our scanner page
await Navigation.PushAsync(scanPage);
}
在我的App.xaml.cs中,我的主页也指向具有上述功能的QRPage.xaml.cs
MainPage = new NavigationPage(new QRPage());
似乎此var scanPage = new ZXingScannerPage()
或await Navigation.PushAsync(scanPage)
被多次调用,因为当我关闭它时,会弹出一个新窗口,当应用程序最初加载时,它会崩溃,除非我最小化并最大化应用程序。
我究竟做错了什么? OnAppearing()是once-off
用于once-off
页面创建的函数吗?
private bool alreadyScanned;
protected override async void OnAppearing()
{
base.OnAppearing();
if(alreadyScanned)
return;
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
alreadyScanned = true;
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
await Navigation.PushAsync(page);
}
这是一个粗略的示例,可以用许多好的方法来完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.