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

DotNet Maui中BarcodeScanner.Mobile.Maui页面切换后失效如何解决?

问题描述

我开发了一款.NET MAUI应用,集成了BarcodeScanner.Mobile.Maui条码扫描器。当从“Achats”Shell页面切换回包含条码扫描器的“Vente”Shell页面时,扫描器无法工作/未激活,状态如下:
扫描器未激活状态1
扫描器未激活状态2

我的XAML代码如下:

<gv:CameraView 
    HorizontalOptions="FillAndExpand"
    VerticalOptions="FillAndExpand"
    OnDetected="CameraView_OnDetected" 
    TorchOn="False"
    VibrationOnDetected="False"
    ScanInterval="50"
    x:Name="cameraScanner"
/>     

我尝试过设置cameraScanner.Scanning = true;但问题依旧,求解决办法。

解决方案

试试以下几种方案,按顺序排查:

1. 利用页面生命周期重新启动扫描

在“Vente”页面的OnAppearing方法中重新初始化扫描器,同时在OnDisappearing里释放资源:

protected override void OnAppearing()
{
    base.OnAppearing();
    cameraScanner.IsScanning = true;
    _ = cameraScanner.StartCameraAsync();
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    cameraScanner.IsScanning = false;
    _ = cameraScanner.StopCameraAsync();
}

2. 重新检查相机权限

切换页面后相机权限可能出现异常,在OnAppearing里重新校验并请求权限:

protected override async void OnAppearing()
{
    base.OnAppearing();
    var status = await Permissions.CheckStatusAsync<Permissions.Camera>();
    if (status != PermissionStatus.Granted)
    {
        status = await Permissions.RequestAsync<Permissions.Camera>();
    }
    if (status == PermissionStatus.Granted)
    {
        cameraScanner.IsScanning = true;
        await cameraScanner.StartCameraAsync();
    }
}

3. 重新创建扫描器实例

如果以上方法无效,尝试在页面重新出现时替换扫描器实例:

protected override void OnAppearing()
{
    base.OnAppearing();
    // 替换成你实际承载CameraView的布局控件名称
    cameraContainer.Children.Remove(cameraScanner);
    
    cameraScanner = new CameraView
    {
        HorizontalOptions = LayoutOptions.FillAndExpand,
        VerticalOptions = LayoutOptions.FillAndExpand,
        TorchOn = false,
        VibrationOnDetected = false,
        ScanInterval = 50
    };
    cameraScanner.OnDetected += CameraView_OnDetected;
    
    cameraContainer.Children.Add(cameraScanner);
    _ = cameraScanner.StartCameraAsync();
}

4. 禁用页面缓存

Shell默认缓存页面可能导致资源未释放,在“Vente”页面XAML中禁用缓存:

<ContentPage ... Shell.NavigationCacheMode="Disabled">
    <!-- 页面内容 -->
</ContentPage>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:33:16