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

