首页 > 解决方案 > 如何等到用户在 Activity 中给予或拒绝权限请求?

问题描述

我希望我的代码等到用户单击权限请求弹出窗口上的某些内容,然后继续。

我的 RequestActivity 中有这个,但我需要在应用程序加载之前请求结果。

    protected override void OnResume()
    {
        base.OnResume();

        Task startupWork = new Task(async () => { await GetPermissions(); });
        startupWork.Start();

        StartActivity(new Intent(Application.Context, typeof(MainActivity)));
    }

    public static async Task GetPermissions()
    {
        var permissionsStartList = new List<Permission>()
        {
            Permission.Storage,
            Permission.Camera
        };

        var permissionsNeededList = new List<Permission>();
        try
        {
            foreach (var permission in permissionsStartList)
            {
                var status = await Plugin.Permissions.CrossPermissions.Current.CheckPermissionStatusAsync(permission);
                if (status != PermissionStatus.Granted)
                {
                    permissionsNeededList.Add(permission);
                }
            }
        }
        catch (System.Exception)
        {
        }

        var results = await Plugin.Permissions.CrossPermissions.Current.RequestPermissionsAsync(permissionsNeededList.ToArray());

        try
        {
            foreach (var permission in permissionsNeededList)
            {
                var status = PermissionStatus.Denied;
                //Best practice to always check that the key exists
                if (results.ContainsKey(permission))
                    status = results[permission];
            }
        }
        catch (System.Exception)
        {
        }
    }

标签: androidxamarinpermissionsrequest

解决方案


我找到了一个解决方案:

OnCreate 函数:

List<string> permissionNeededList = new List<string>();

if (ActivityCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.Camera) != (int)Permission.Granted)
{
   permissionNeededList.Add(Manifest.Permission.Camera);
}
if (ActivityCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
{
   permissionNeededList.Add(Manifest.Permission.WriteExternalStorage);
}

if (permissionNeededList.Count == 0)
{
   LoadApplication(new App());
}
else
{
   ActivityCompat.RequestPermissions(this, permissionNeededList.ToArray(), 1);
}

OnRequestPermissionsResult 函数:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
   LoadApplication(new App());
}

推荐阅读