Камера не работает в рабочем профиле - 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);
Удачи, дайте мне знать, если у вас возникнут вопросы.
Также странно, что этот код работает на другом вашем устройстве !!