Пример #1
0
        internal static void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
        {
            PermissionsRequestCode code = (PermissionsRequestCode)requestCode;

            TaskCompletionSource <bool[]> completitionSource = requestCodeToCompletitionSource[code];

            requestCodeToCompletitionSource.Remove(code);

            bool[] results = new bool[grantResults.Length];
            for (int i = 0; i < grantResults.Length; i++)
            {
                results[i] = grantResults[i] == Permission.Granted;
            }

            completitionSource.SetResult(results);
        }
Пример #2
0
        private async static Task <bool> RequestAccessPermission(PermissionsRequestCode permissionCode, string[] permissions)
        {
            if (Activity == null)
            {
                throw new ArgumentNullException(nameof(Activity));
            }

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

            for (int i = 0; i < permissions.Length; i++)
            {
                string permission = permissions[i];
                if (Activity.CheckSelfPermission(permission) != Permission.Granted)
                {
                    permissionsToRequest.Add(permission);
                }
            }

            if (permissionsToRequest.Count == 0)
            {
                return(true);
            }

            if (requestCodeToCompletitionSource.ContainsKey(permissionCode))
            {
                return(false);
            }

            TaskCompletionSource <bool[]> completitionSource = new TaskCompletionSource <bool[]>();

            requestCodeToCompletitionSource[permissionCode] = completitionSource;

            Activity.RequestPermissions(permissionsToRequest.ToArray(), (int)permissionCode);

            bool[] results = await completitionSource.Task;

            for (int i = 0; i < results.Length; i++)
            {
                if (!results[i])
                {
                    return(false);
                }
            }

            return(true);
        }