我正在尝试让我的Xamarin.Android应用在启动屏幕上寻求许可,这是要启动的第一个活动。
我正在使用permission plugin for Xamarin。
我也在使用async modal dialog implementation。
这是初始屏幕活动的与权限相关的代码:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
private async Task<bool> RequestPermissionsAndTellIfWeShouldContinueAsync()
{
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Storage))
{
await Utilities.MessageBox.Show(this, Resources.GetString(Resource.String.explain_external_storage_permission_title), Resources.GetString(Resource.String.explain_external_storage_permission_text), true);
}
var newStatus = await CrossPermissions.Current.RequestPermissionsAsync(new Permission[] { Permission.Storage });
var result = newStatus.Values.ElementAt(0);
if (result == PermissionStatus.Granted)
{
return true;
}
if (result == PermissionStatus.Denied)
{
await Utilities.MessageBox.Show(this, Resources.GetString(Resource.String.cant_continue_without_permission_title), Resources.GetString(Resource.String.cant_continue_without_permission_text), true);
return false;
}
return false;
}
else
return true;
}
}
接下来是试图在OnResume回调上寻求许可的代码
protected override async void OnResume()
{
base.OnResume();
bool shallWeContinue = await RequestPermissionsAndTellIfWeShouldContinueAsync();
if ( shallWeContinue)
{
// Start Main activity
}
else
{
// End current activity and go back to android launcher
Finish();
}
}
只要我接受许可请求,它就可以正常工作。
如果我两次拒绝,那么我的问题是我进入一个无限循环,显示最后一个消息框,该消息框说明现在应在应用程序选项中手动授予权限。
最佳答案
这可能是因为权限对话框消失后每次都会调用onResume
-这是标准的Android行为。将onResume
逻辑移到onStart
或onCreate
方法以避免循环。
关于c# - 如何在初始屏幕上请求许可,如果被拒绝则退出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56355232/