相机无法在工作配置文件上工作 - Xamarin Android

问题描述 投票:0回答:1

我使用 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)

更新: 我想我可能需要请求应用程序访问工作配置文件上的相机的权限?这可能吗

android xamarin camera xamarin.essentials android-work-profile
1个回答
0
投票

阅读文档后,我意识到问题可能是由于线程所致。

当您阅读文档时,它清楚地说:

所有方法都必须在 UI 线程上调用,因为权限检查和请求由 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);

此外,此代码在您的其他设备上运行有点奇怪!

© www.soinside.com 2019 - 2024. All rights reserved.