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

.NET MAUI中Camera.MAUI启动相机时开闪光灯致Android崩溃

.NET MAUI Camera.MAUI Android端自动开启闪光灯崩溃问题

我正在开发一款使用手机摄像头拍照和扫描条形码的.NET MAUI应用,采用Camera.MAUI NuGet包,多数场景运行正常。但新增需求——用户切换到相机视图时自动开启闪光灯——在iOS端正常,Android端却崩溃。

实现方式

XAML代码

xmlns:camera="clr-namespace:Camera.MAUI;assembly=Camera.MAUI"

<camera:CameraView x:Name="CameraView"
                   WidthRequest="360" 
                   HeightRequest="240"
                   Margin="0,20,0,0"
                   CamerasLoaded="CameraViewCamerasLoaded"
                   BarCodeDetectionEnabled="True"
                   TorchEnabled="{Binding Path=UseFlash}"
                   FlashMode="Enabled"
                   BarcodeDetected="CameraViewBarcodeDetected" />

后台代码

private void CameraViewCamerasLoaded(object sender, EventArgs e)
{
    if (CameraView.Cameras.Count > 0)
    {
        CameraView.Camera = CameraView.Cameras.First();

        MainThread.BeginInvokeOnMainThread(async () =>
        {
            await CameraView.StopCameraAsync();
            await CameraView.StartCameraAsync();

            _viewModel.InitializeCamera();
        });
    }
}

视图模型代码

public bool UseFlash
{
    get { return _useFlash; }
    set { SetValue(ref _useFlash, value); }
}

private bool _useFlash;

public void InitializeCamera()
{
    var deviceService = _serviceProvider.GetService<IDeviceService>();
    if (deviceService != null)
    {
        UpdateFlash(deviceService.GetDefaultCameraFlashState());
    }
}

private void UpdateFlash(bool useFlash)
{
    UseFlash = useFlash;

    if (_flashButton != null)
    {
        if (!UseFlash)
        {
            _flashButton.Caption = _translationService.Get("global_syn_patrol_enable_camera_flash");
        }
        else
        {
            _flashButton.Caption = _translationService.Get("global_syn_patrol_disable_camera_flash");
        }
    }
}

逻辑说明

将视图中相机的闪光灯与视图模型的UseFlash属性绑定。相机加载时执行CameraViewCamerasLoaded,在主线程重新初始化相机并初始化视图模型,读取闪光灯默认设置并赋值给UseFlash。

平台差异与异常

iOS端符合预期,切换到相机模块时闪光灯正常开启;Android端抛出以下异常:

System.NullReferenceException
  Message=Object reference not set to an instance of an object.

堆栈跟踪:

0xFFFFFFFFFFFFFFFF in Android.Runtime.RuntimeNativeMethods.monodroid_debugger_unhandled_exception   C#
0x1A in Android.Runtime.JNINativeWrapper._unhandled_exception at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:13,5 C#
0x1D in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PP_V at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:27,26    C#
0x17 in System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw    C#
0x6 in System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0 C#
0xC in Android.App.SyncContext. at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:36,19 C#
0xE in Java.Lang.Thread.RunnableImplementor.Run at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36,6 C#
0x8 in Java.Lang.IRunnableInvoker.n_Run at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net8.0/android-34/mcw/Java.Lang.IRunnable.cs:84,4    C#
0x8 in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PP_V at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:26,5  C#

我已尝试在线搜索解决方案但未成功,恳请各位提供解决思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:47:20