我使用 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)
更新: 我想我可能需要请求应用程序访问工作配置文件上的相机的权限?这可能吗
阅读文档后,我意识到问题可能是由于线程所致。
当您阅读文档时,它清楚地说:
所有方法都必须在 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);
此外,此代码在您的其他设备上运行有点奇怪!