如何解决必须在 Xamarin 中的主线程上调用权限请求?
How to solve Permission request must be invoked on main thread in Xamarin?
我有一个 Xamarin 应用程序。
应用程序有一个用于打开网站的 webview 控件。我想在需要摄像头的特定网页中使用手机 phone 的摄像头。如果未打开此特定页面,则无需为该应用请求摄像头权限。所以我想做的是从页面 javascript 向 Xamarin 应用程序发送请求并请求相机访问权限。
我按照本教程创建了一个混合 webview,允许我将命令从 Javascript 发送到 C#:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview
所以我注册了一个将从 Javascript 调用的操作,如下所示:
hybridWebView.RegisterAction(async data =>
{
DisplayAlert("Hi ! you called this action from Javascript.");
// Request camera permission
RequestCameraAccessAsync();
});
使用 RequestCameraAccessAsync 作为 :
private async void RequestCameraAccessAsync()
{
var status = await Permissions.CheckStatusAsync<Permissions.Camera>();
if (status == PermissionStatus.Granted)
return;
if (status == PermissionStatus.Denied && DeviceInfo.Platform == DevicePlatform.iOS)
{
// Prompt the user to turn on in settings
// On iOS once a permission has been denied it may not be requested again from the application
return;
}
status = Permissions.RequestAsync<Permissions.Camera>().Result;
}
Javascript 和 C# 之间的桥梁工作正常。但是,每当代码点击请求权限时,它都会失败并提示:必须在主线程上调用权限请求。
我理解这个错误。但是考虑到权限请求应该只在注册的操作上完成,请问有没有办法使这项工作正常进行?
谢谢。
使用 Essentials MainThread
MainThread.BeginInvokeOnMainThread(() =>
{
// Code to run on the main thread
});
我有一个 Xamarin 应用程序。
应用程序有一个用于打开网站的 webview 控件。我想在需要摄像头的特定网页中使用手机 phone 的摄像头。如果未打开此特定页面,则无需为该应用请求摄像头权限。所以我想做的是从页面 javascript 向 Xamarin 应用程序发送请求并请求相机访问权限。
我按照本教程创建了一个混合 webview,允许我将命令从 Javascript 发送到 C#:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview
所以我注册了一个将从 Javascript 调用的操作,如下所示:
hybridWebView.RegisterAction(async data =>
{
DisplayAlert("Hi ! you called this action from Javascript.");
// Request camera permission
RequestCameraAccessAsync();
});
使用 RequestCameraAccessAsync 作为 :
private async void RequestCameraAccessAsync()
{
var status = await Permissions.CheckStatusAsync<Permissions.Camera>();
if (status == PermissionStatus.Granted)
return;
if (status == PermissionStatus.Denied && DeviceInfo.Platform == DevicePlatform.iOS)
{
// Prompt the user to turn on in settings
// On iOS once a permission has been denied it may not be requested again from the application
return;
}
status = Permissions.RequestAsync<Permissions.Camera>().Result;
}
Javascript 和 C# 之间的桥梁工作正常。但是,每当代码点击请求权限时,它都会失败并提示:必须在主线程上调用权限请求。
我理解这个错误。但是考虑到权限请求应该只在注册的操作上完成,请问有没有办法使这项工作正常进行?
谢谢。
使用 Essentials MainThread
MainThread.BeginInvokeOnMainThread(() =>
{
// Code to run on the main thread
});