Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在启动屏幕上请求权限并在被拒绝时退出?_C#_Android_Xamarin.android - Fatal编程技术网

C# 如何在启动屏幕上请求权限并在被拒绝时退出?

C# 如何在启动屏幕上请求权限并在被拒绝时退出?,c#,android,xamarin.android,C#,Android,Xamarin.android,我正试图让我的Xamarin.Android应用程序在启动屏幕上请求许可,这是第一个要启动的活动 我在用电话。 我也在用一个 以下是启动屏幕活动的权限相关代码: public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) { PermissionsImp

我正试图让我的Xamarin.Android应用程序在启动屏幕上请求许可,这是第一个要启动的活动

我在用电话。 我也在用一个

以下是启动屏幕活动的权限相关代码:

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
,这是安卓的标准行为。将
onResume
逻辑移动到
onStart
onCreate
方法以避免循环。

将逻辑移动到onCreate解决了问题。太谢谢你了,我都快发疯了。
    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();
        }


    }