【问题标题】:Camera not working on work profile - Xamarin Android相机无法在工作资料上工作 - Xamarin Android
【发布时间】:2021-11-01 14:32:09
【问题描述】:

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

更新: 我想我可能需要申请该应用的权限才能访问工作资料中的摄像头?这可能吗

【问题讨论】:

  • 在失败的情况下会抛出什么异常,我在我的场所也有 intunes 但这从未发生在我身上,这可能是一个完全不同的问题。将您的异常添加到问题中,如果可能,还添加相关的堆栈跟踪。
  • 您好,我已经添加了堆栈跟踪。我没有抛出异常,它只是崩溃了。
  • 抛出了一个异常,这就是它崩溃的原因。将相关代码放在try catch block 中并在catch 块中添加断点,在异常对象中,您将获得一个堆栈跟踪帖子,您在上面发布的内容不足以告诉您崩溃的原因或位置从

标签: android xamarin camera xamarin.essentials android-work-profile


【解决方案1】:

阅读文档后,我意识到问题可能是因为线程。

当您阅读docs 时,它清楚地表明:

必须在 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);

祝你好运,如果您有任何疑问,请告诉我。

这个代码在你的其他设备上也能运行有点奇怪!

【讨论】:

  • 嗨,不,不幸的是,这不起作用。我认为这与文件 URI 有关,但我对此没有什么经验?
  • 你能添加堆栈跟踪吗?
猜你喜欢
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多