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

使用ZXing.Mobile.Forms扫码时无法开启手电筒问题求助

解决ZXing.Mobile.Forms扫描时手电筒无法开启的问题

嘿,我来帮你搞定这个手电筒不亮的问题!你当前代码的问题在于调用ToggleTorch()的时机不对——在Scan()方法执行前,扫描器还没完成初始化、相机也没启动,这时候调用手电筒开关自然不会生效。下面给你几个可行的解决方案:

1. 调整代码逻辑:在扫描启动后开启手电筒

我们可以利用扫描器的ScanningStarted事件,在扫描会话真正开始后再触发手电筒开关,这样就能确保相机已经初始化完成:

var scanner = new ZXing.Mobile.MobileBarcodeScanner();
var option = new ZXing.Mobile.MobileBarcodeScanningOptions 
{
    UseCode39ExtendedMode = true,
    TryHarder = true,
    PureBarcode = true,
};

// 绑定扫描启动事件,此时再开启手电筒
scanner.ScanningStarted += (sender, args) =>
{
    // 直接设置IsTorchOn比ToggleTorch更明确,避免状态混乱
    scanner.IsTorchOn = true;
};

var result = await scanner.Scan(option);

if (result != null)
    await Application.Current.MainPage.DisplayAlert("扫描结果", result.Text, "确定");

await Application.Current.MainPage.Navigation.PopAsync(true);

2. 更简便的方式:直接在扫描选项中开启手电筒

如果你使用的ZXing.Mobile版本支持,还可以直接在MobileBarcodeScanningOptions里设置TorchEnabled = true,省去事件绑定的步骤:

var scanner = new ZXing.Mobile.MobileBarcodeScanner();
var option = new ZXing.Mobile.MobileBarcodeScanningOptions 
{
    UseCode39ExtendedMode = true,
    TryHarder = true,
    PureBarcode = true,
    TorchEnabled = true // 直接开启手电筒
};

var result = await scanner.Scan(option);

// 后续逻辑不变...

3. 关键前提:确保权限配置正确

手电筒依赖相机权限,不同平台需要提前配置权限:

  • Android:在AndroidManifest.xml中添加以下权限:
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" />
    
    注意Android 6.0+需要运行时权限,你可以用Xamarin.Essentials的Permissions组件提前请求权限:
    // 扫描前检查并请求权限
    var cameraPerm = await Permissions.CheckStatusAsync<Permissions.Camera>();
    var flashPerm = await Permissions.CheckStatusAsync<Permissions.Flash>();
    
    if (cameraPerm != PermissionStatus.Granted)
        cameraPerm = await Permissions.RequestAsync<Permissions.Camera>();
    if (flashPerm != PermissionStatus.Granted)
        flashPerm = await Permissions.RequestAsync<Permissions.Flash>();
    
    if (cameraPerm != PermissionStatus.Granted || flashPerm != PermissionStatus.Granted)
    {
        await Application.Current.MainPage.DisplayAlert("提示", "需要相机和手电筒权限才能扫描", "确定");
        return;
    }
    
  • iOS:在Info.plist中添加相机权限描述(iOS 10+强制要求):
    <key>NSCameraUsageDescription</key>
    <string>需要使用相机进行条形码扫描</string>
    

按照上面的步骤调整后,手电筒应该就能正常工作啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:13:16