Камера не работает в рабочем профиле - Xamarin Android

Я разработал приложение с использованием Xamarin для устройств Android. Я использую средство выбора мультимедиа из пакета Xamarin.Essentials. На моем рабочем месте у нас есть два типа устройств - одно с рабочим профилем, использующее Microsoft intunes. Приложение отлично работает на других устройствах, но вылетает, когда я открываю камеру на устройстве с рабочим профилем. Я запросил соответствующие разрешения в манифесте. У кого-нибудь есть опыт с этим? Я впервые использую Xamarin. Я включил часть своего кода ниже и ошибку, которую он выдает.

С уважением

      bool x = MediaPicker.IsCaptureSupported;
            if(x == false)
            {
               await DisplayAlert("ok", "alert", "cancel");
            }
            var photo = await MediaPicker.CapturePhotoAsync();

            var stream = await photo.OpenReadAsync();

            newImage.Source = ImageSource.FromStream(() => stream);
    
     

      java.lang.RuntimeException
java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3827)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:4003)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:85)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2317)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:246)
  at android.app.ActivityThread.main (ActivityThread.java:8595)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:602)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1130)
Caused by: java.lang.IllegalArgumentException: 
  at androidx.core.content.FileProvider.parsePathStrategy (FileProvider.java:606)
  at androidx.core.content.FileProvider.getPathStrategy (FileProvider.java:579)
  at androidx.core.content.FileProvider.getUriForFile (FileProvider.java:417)
  at crc64a0e0a82d0db9a07d.IntermediateActivity.n_onCreate (Native Method)
  at crc64a0e0a82d0db9a07d.IntermediateActivity.onCreate (IntermediateActivity.java:31)
  at android.app.Activity.performCreate (Activity.java:8207)
  at android.app.Activity.performCreate (Activity.java:8191)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3800)

1 ответ

Прочитав документы, я понял, что проблема, вероятно, связана с потоком.

когда вы читаете документы, там ясно сказано:

Все методы должны вызываться в потоке пользовательского интерфейса, поскольку проверки разрешений и запросы автоматически обрабатываются Xamarin.Essentials.

Таким образом, код, который вы используете для получения фотографии, должен выглядеть примерно так:

       var photo = await Xamarin.Essentials.MainThread.
            InvokeOnMainThreadAsync(
            async () => await MediaPicker.CapturePhotoAsync());

Это означает, что ваш полный код будет выглядеть так:

      bool x = MediaPicker.IsCaptureSupported;
        if(x == false)
        {
           await DisplayAlert("ok", "alert", "cancel");
        }
       var photo = await Xamarin.Essentials.MainThread.
            InvokeOnMainThreadAsync(
            async () => await MediaPicker.CapturePhotoAsync());
        var stream = await photo.OpenReadAsync();

        newImage.Source = ImageSource.FromStream(() => stream);

Удачи, дайте мне знать, если у вас возникнут вопросы.

Также странно, что этот код работает на другом вашем устройстве !!

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