更新:这是硬件问题。它适用于较新的手机。
添加ZXing.Net.Mobile
和ZXing.Net.Mobile.Forms
项目。
扫描仪视图和相机看起来不错。闪光灯按钮有效。但OnScanResult
从未提出。尝试了各种 DataMatrix、PDF417 和 QR 码。
测试手机是HTC M9。
扫描仪页面.xaml
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:zxing="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms"
x:Class="MyApp.ScannerPage">
<ContentPage.Content>
<Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<zxing:ZXingScannerView
x:Name="ScannerView"/>
<zxing:ZXingDefaultOverlay
x:Name="ScannerOverlay"
TopText="Hold your phone up to the barcode"
BottomText="Scanning will happen automatically"/>
</Grid>
</ContentPage.Content>
</ContentPage>
ScannerPage.xaml.cs
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class ScannerPage : ContentPage
{
public ScannerPage()
{
InitializeComponent();
ScannerView.Options = new ZXing.Mobile.MobileBarcodeScanningOptions
{
PossibleFormats = new List<BarcodeFormat>
{
BarcodeFormat.DATA_MATRIX,
BarcodeFormat.PDF_417,
BarcodeFormat.QR_CODE
},
TryHarder = true
};
ScannerView.OnScanResult += (result) =>
{
var x = 3; // Breakpoint here, never hit
Device.BeginInvokeOnMainThread(async () =>
{
// Stop analysis until we navigate away so we don't keep reading barcodes
//ScannerView.IsAnalyzing = false;
// Show an alert
await DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
ScannerOverlay.ShowFlashButton = ScannerView.HasTorch;
ScannerOverlay.FlashButtonClicked += (se, ev) => ScannerView.ToggleTorch();
}
protected override void OnAppearing()
{
base.OnAppearing();
ScannerView.IsAnalyzing = true;
ScannerView.IsScanning = true;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
ScannerView.IsScanning = false;
}
}