You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Android升级至.NET 8后ZXing.Net.Mobile扫码功能异常求助

解决.NET 8 Android下ZXing.Net.Mobile扫码故障的方案及替代库

修复ZXing.Net.Mobile适配.NET 8的方法

  • 升级至预发布版本:ZXing.Net.Mobile的正式版可能未完全适配.NET 8,可尝试安装NuGet上的预发行包,通过命令行执行:
    Install-Package ZXing.Net.Mobile.Android -Pre
    
  • 调整权限与初始化逻辑:Android 13+对相机权限要求更严格,需确保动态申请权限后再初始化扫码器:
    private const int RequestCameraPermission = 1;
    
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        CheckCameraPermissionAndInitializeScanner();
    }
    
    private void CheckCameraPermissionAndInitializeScanner()
    {
        if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) != Permission.Granted)
        {
            ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.Camera }, RequestCameraPermission);
        }
        else
        {
            MobileBarcodeScanner.Initialize(Application);
        }
    }
    
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
    {
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == RequestCameraPermission && grantResults.Any(r => r == Permission.Granted))
        {
            MobileBarcodeScanner.Initialize(Application);
        }
    }
    
  • 替换控件初始化方式:若使用ZXingScannerView,尝试通过代码实例化而非AXML布局绑定,避免兼容性问题:
    var scannerView = new ZXingScannerView(this);
    scannerView.OnScanResult += (sender, result) => {
        // 处理扫码结果
    };
    SetContentView(scannerView);
    

兼容.NET 8 Android的二维码扫描替代库

  • ZXing.Net核心库:放弃ZXing.Net.Mobile的封装层,直接使用ZXing.Net核心库自行实现相机预览与解码,兼容性更强,灵活性更高。只需安装ZXing.Net包,结合Android相机API获取帧数据后调用解码方法即可。
  • Google ML Kit条码扫描:官方提供的工具,对.NET 8 Android支持完善,性能稳定,支持离线扫码。安装Xamarin.Google.MLKit.BarcodeScanning包后,可快速集成:
    private BarcodeScanner _scanner;
    
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        _scanner = BarcodeScanning.GetClient(
            new BarcodeScannerOptions.Builder().SetBarcodeFormats(Barcode.Format.QrCode).Build()
        );
        // 结合相机预览获取图像帧,传入_scanner.ProcessImageAsync()解码
    }
    
  • BarcodeScanner.Mobile:专为.NET Android/MAUI设计的轻量库,API简洁开箱即用。安装BarcodeScanner.Mobile包后,一行代码即可发起扫码:
    var scanner = new BarcodeScanner();
    var result = await scanner.ScanAsync(this);
    if (result != null)
    {
        string qrContent = result.Text;
    }
    

内容的提问来源于stack exchange,提问作者Niroshan K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:31:02