首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使ZxingScanner开始扫描?

如何使ZxingScanner开始扫描?
EN

Stack Overflow用户
提问于 2022-02-14 13:37:30
回答 2查看 682关注 0票数 1

我试图实现条形码扫描在我的Xamarin形式,但没有成功。

我能让相机正常工作,但我看不到屏幕上的红线,它只是拒绝扫描任何东西

我试过this answer。我可以通过我的相机看到,但没有出现红线。但我可以把火把关起来

XAML代码:

代码语言:javascript
运行
复制
<Button  BackgroundColor="Chocolate" Clicked="Button_Clicked"/>
<zxing:ZXingScannerView 
    x:Name="_scanView" 
    OnScanResult="Handle_OnScanResult" 
    IsScanning="true" 
    IsAnalyzing="true"
    WidthRequest="200" 
    HeightRequest="200" />

C#代码:

代码语言:javascript
运行
复制
private void Button_Clicked(object sender, EventArgs e)
{
    _scanView.ToggleTorch();
}

private void Handle_OnScanResult(ZXing.Result result)
{
    ChassisEntry.Text = result.Text;
}


// this is in the constructor of the page
MobileBarcodeScanningOptions options = new ZXing.Mobile.MobileBarcodeScanningOptions()
{
    TryHarder = true,
    PossibleFormats = new List<ZXing.BarcodeFormat>() { ZXing.BarcodeFormat.All_1D }
};
_scanView.Options = options;

我错过了什么?

编辑

我的MainActivity.cs里有这个

代码语言:javascript
运行
复制
protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
    ZXing.Net.Mobile.Forms.Android.Platform.Init();
    LoadApplication(new App());
}

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
   Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
   ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);

   base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

添加到应答

拉法的答案对我有用,唯一的问题是扫描视图上没有红线。

我找到了这个workaround来解决这个问题。

但是,这是一个解决办法,因为我注意到,如果条形码在视图中的任何位置,扫描就已经发生了。

虽然这可能不会出现问题,但在我的例子中,我有多达20个条形码的纸质表单,当用户想要瞄准某个特定的条形码时,他可能会得到错误的。

因此,如果有人知道更好的解决方案,我想听听。

我会就这个问题提出一个单独的问题。

这就是我现在使用的解决方法。

代码语言:javascript
运行
复制
  <Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
                <zxing:ZXingScannerView
                    x:Name="_scanView"
                    OnScanResult="Handle_OnScanResult"
                    IsScanning="true"
                    WidthRequest="200"
                    HeightRequest="200"/>


                <zxing:ZXingDefaultOverlay
                    x:Name="scannerOverlay"                                                       
                    BottomText="Place the red line over the barcode you'd like to scan.">

                </zxing:ZXingDefaultOverlay>
            </Grid>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 14:47:28

在我的工作项目中,我使用了以下xaml声明:

代码语言:javascript
运行
复制
<zxing:ZXingScannerView x:Name="qrCodeScannerView" 
                        OnScanResult="Handle_OnScanResult" 
                        IsScanning="true"
                        WidthRequest="1024" 
                        HeightRequest="400" />

注意,我没有像您一样在xaml声明中设置isAnalyzing属性。当页面出现时,z行控件立即开始工作和分析。

然后在xaml.cs文件中

代码语言:javascript
运行
复制
        public void Handle_OnScanResult(Result scanResult)
        {
                qrCodeScannerView.IsScanning = false;
                // processing scanResult.Text here
        }

        protected override void OnAppearing()
        {
            base.OnAppearing();
            qrCodeScannerView.IsScanning = true;
        }

        protected override void OnDisappearing()
        {
            base.OnDisappearing();
            qrCodeScannerView.IsScanning = false;
        }

这看起来很奇怪,但是也在isScanning文件中设置xaml.cs属性为我解决了这个任务。

票数 1
EN

Stack Overflow用户

发布于 2022-02-14 14:49:01

尝试从XAML中完全删除ZXingScannerView。在按钮的单击事件上添加以下代码:

代码语言:javascript
运行
复制
private async void ButtonScan(object sender, EventArgs e)
{
    PermissionStatus granted = await Permissions.CheckStatusAsync<Permissions.Camera>();
    if (granted != PermissionStatus.Granted)
    {
        _ = await Permissions.RequestAsync<Permissions.Camera>();
    }
    if (granted == PermissionStatus.Granted)
    {
        try
        {
            MobileBarcodeScanner scanner = new MobileBarcodeScanner();
            ZXing.Result result = await scanner.Scan();
            if (result != null && result.Text != "")
            {
                //You access your scanned text with result.Text
                scanner.Cancel(); // <--- This closes the scanner
            }
        }
        catch (Exception)
        {
            await DisplayAlert("Problem", "Something went wrong.", "ΟΚ");
        }
    }
    else
    {
        await DisplayAlert("Problem", "No permissions to use camera.", "ΟΚ");
    }
} 

编辑

OP提到,为了使其工作,我应该在我的答案中添加这一行代码。

在MainActivity.cs中,您必须像这样初始化扫描仪:

代码语言:javascript
运行
复制
ZXing.Mobile.MobileBarcodeScanner.Initialize(Application);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71112792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档