Camera.MAUI.ZXing (.Net 8) Функция не обнаруживает мои камеры

Я использую 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 камеры?

Вы добавили разрешение «КАМЕРА» в AndroidManifest.xml?

radoczsanyi_ 10.07.2024 15:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу воспроизвести вашу проблему. 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.

Liyun Zhang - MSFT 15.07.2024 11:06

Другие вопросы по теме