我试过调试,用户点击Deny时的错误是UnauthorizedAccessException。我知道所有权限处理都在 MainActivity 中,但我怎样才能避免这种情况再发生?
根据您的描述,我猜您的项目是Xamarin.Forms,并且您想访问相机,现在您不想在选择Deny for Camera时得到UnauthorizedAccessException?我说的对吗?
如果是,我建议你可以先通过 Nuget 包安装使用 Plugin.Permissions。
然后在ContentPage中,可以使用下面的代码来请求摄像头权限。
try
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Camera))
{
await DisplayAlert("Need camera", "Gunna need that camera", "OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Camera);
status = results[Permission.Camera];
}
if (status == PermissionStatus.Granted)
{
Console.WriteLine("camera access");
}
else if (status != PermissionStatus.Unknown)
{
await DisplayAlert("camera Denied", "Can not continue, try again.", "OK");
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex);
LabelGeolocation.Text = "Error: " + ex;
}
然后在MainActivity.cs中添加一些代码
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
并在 Mainactivity.cs 的 OnCreate 方法中添加如下代码:
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
关于其他权限的使用,可以看看:
https://github.com/jamesmontemagno/PermissionsPlugin