You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms请求权限时PermissionStatus因保护级别无法访问如何解决?

问题原因

你遇到的报错不是缺少NuGet包导致的,核心问题是命名空间冲突:
你已经通过using Xamarin.Essentials;引用了权限相关的正确命名空间,但是额外引入的using Java.Security;和系统自带的System.Security.Permissions命名空间下存在同名类型,IDE优先识别到了其他命名空间下非公开的PermissionStatus类型,才会抛出保护级别不足的报错,给的替换为PermissionState的建议也是错误的,这个类型完全不适用于Xamarin.Essentials的权限API。

解决步骤

  • 确认你项目的共享层、Android端、iOS端都安装了同版本的Xamarin.Essentials NuGet包,版本建议选择和你Xamarin.Forms版本匹配的稳定版,若已经安装可以更新到最新稳定版,避免旧版本API公开性问题。
  • 删除代码中无用的using Java.Security;引用,这段权限申请逻辑完全不需要调用Java.Security下的内容。
  • 如果删除后仍有冲突,可以直接给PermissionStatus加上完整命名空间前缀,强制指定使用Xamarin.Essentials下的类型,避免冲突。

修正后代码

using System.ComponentModel;
using Xamarin.Forms;
using System.Threading.Tasks;
using Xamarin.Essentials;

namespace MyNameSpace
{
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {       
        // 加完整命名空间前缀彻底避免冲突
        public async Task<Xamarin.Essentials.PermissionStatus> CheckAndRequestLocationPermission()
        {
            var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();

            if (status == Xamarin.Essentials.PermissionStatus.Granted)
                return status;

            if (status == Xamarin.Essentials.PermissionStatus.Denied && DeviceInfo.Platform == DevicePlatform.iOS)
            {
                // 提示用户去设置页开启权限,iOS权限被拒绝后无法在应用内再次申请
                return status;
            }

            if (Permissions.ShouldShowRationale<Permissions.LocationWhenInUse>())
            {
                // 给用户解释需要定位权限的原因
            }

            status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();

            return status;
        }
    }
}

内容的提问来源于stack exchange,提问作者Thomas Carlton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:48:01