DotNet Maui中BarcodeScanner.Mobile.Maui页面切换后失效如何解决?
问题描述
我开发了一款.NET MAUI应用,集成了BarcodeScanner.Mobile.Maui条码扫描器。当从“Achats”Shell页面切换回包含条码扫描器的“Vente”Shell页面时,扫描器无法工作/未激活,状态如下:

我的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
相关产品推荐
相关产品推荐

