コード例 #1
0
        //static readonly object locker = new object();
        //static int requestCode = 0;

        //static Dictionary<PermissionType, (int requestCode, TaskCompletionSource<PermissionStatus> tcs)> requests =
        //new Dictionary<PermissionType, (int, TaskCompletionSource<PermissionStatus>)>();

        //static void PlatformEnsureDeclared(PermissionType permission)
        internal static void EnsureDeclared(PermissionType permission)
        {
            var androidPermissions = permission.ToAndroidPermissions(onlyRuntimePermissions: false);

            // No actual android permissions required here, just return
            if (androidPermissions == null || !androidPermissions.Any())
            {
                return;
            }

            var context = Platform.AppContext;

            foreach (var ap in androidPermissions)
            {
                var packageInfo          = context.PackageManager.GetPackageInfo(context.PackageName, PackageInfoFlags.Permissions);
                var requestedPermissions = packageInfo?.RequestedPermissions;

                // If the manifest is missing any of the permissions we need, throw
                if (!requestedPermissions?.Any(r => r.Equals(ap, StringComparison.OrdinalIgnoreCase)) ?? false)
                {
                    throw new UnauthorizedAccessException($"You need to declare the permission: `{ap}` in your AndroidManifest.xml");
                }
            }
        }