Я использую Camera.MAUI.ZXing и Camera.MAUI в своем проекте .Net MAUI. В моем xaml.cs у меня есть следующий код:
private async void InitializeCamera()
{
// barcode detection
cameraView.BarcodeDetected += Camera_OnDetected;
// Inicializar ZXing Barcode Decoder
cameraView.BarCodeDecoder = new ZXingBarcodeDecoder();
// Configurar las opciones del decodificador de códigos de barras
cameraView.BarCodeOptions = new BarcodeDecodeOptions
{
AutoRotate = true,
PossibleFormats = { BarcodeFormat.QR_CODE },
ReadMultipleCodes = false,
TryHarder = true,
TryInverted = true
};
// Configurar otras opciones de detección
cameraView.BarCodeDetectionFrameRate = 10;
cameraView.BarCodeDetectionMaxThreads = 5;
cameraView.ControlBarcodeResultDuplicate = true;
cameraView.BarCodeDetectionEnabled = true;
// Iniciar la cámara de forma asíncrona
if (cameraView.NumCamerasDetected > 0)
{
//if (cameraView.NumMicrophonesDetected > 0)
// cameraView.Microphone = cameraView.Microphones.First();
cameraView.Camera = cameraView.Cameras.FirstOrDefault();
MainThread.BeginInvokeOnMainThread(async () =>
{
if (await cameraView.StartCameraAsync() == CameraResult.Success)
{
playing = true;
}
});
}
else
await DisplayAlert("Warning", "No cameras detected.", "OK");
}
protected override async void OnAppearing()
{
base.OnAppearing();
// Verificar el estado del permiso de la cámara
var cameraStatus = await Permissions.CheckStatusAsync<Permissions.Camera>();
if (cameraStatus != PermissionStatus.Granted)
{
var results = await Permissions.RequestAsync<Permissions.Camera>();
if (results != PermissionStatus.Granted)
{
await Application.Current.MainPage.DisplayAlert("Permisos de cámara", "Los permisos de la cámara han sido denegados, active manualmente los permisos para usar esta funcionalidad", "OK");
return;
}
}
// Inicializar la cámara después de obtener los permisos
InitializeCamera();
}
private async void Camera_OnDetected(object sender, Camera.MAUI.ZXingHelper.BarcodeEventArgs e)
{
string result = e.Result[0].Text;
if (result is null) return;
if (viewModel.ValidaCodigo(result))
{
// Navegar a la página de inicio
Shell.Current.GoToAsync("//HomePage");
//await StopCameraAsync();
}
}
У меня проблема с InitializeCamera: когда я делаю условие для обнаружения камер (NumCamerasDetected) при первом входе в представление и принятии разрешений, он сообщает мне, что на моем устройстве 4 камеры, и это нормально, но когда я вхожу второй раз оказывается, что у меня 0.
Как будто приложение перестанет их обнаруживать.
Есть ли возможность обновить или не потерять 4 камеры?
Я могу воспроизвести вашу проблему. cameraView.NumCamerasDetected
всегда будет 0, когда вы вводите его вторым. Итак, вы можете использовать cameraView.CamerasLoaded
, чтобы получить камеру.
cameraView.BarcodeDetected += Camera_OnDetected;
// Inicializar ZXing Barcode Decoder
cameraView.BarCodeDecoder = new ZXingBarcodeDecoder();
cameraView.CamerasLoaded += (s, e) =>
{
if (cameraView.Cameras.Count > 0)
{
//if (cameraView.NumMicrophonesDetected > 0)
// the cameraView.NumMicrophonesDetected is still 0 here
cameraView.Camera = cameraView.Cameras.FirstOrDefault();
MainThread.BeginInvokeOnMainThread(async () =>
{
if (await cameraView.StartCameraAsync() == CameraResult.Success)
{
// playing = true;
}
});
}
};
Кроме того, вы можете сообщить об этом в репозитории Camera.MAUI.
Вы добавили разрешение «КАМЕРА» в AndroidManifest.xml?