C# 沙马林。Android权限。CheckSelfPermission()异常Java.Lang.NullPointerException

C# 沙马林。Android权限。CheckSelfPermission()异常Java.Lang.NullPointerException,c#,xamarin,permissions,xamarin.android,C#,Xamarin,Permissions,Xamarin.android,调用方法CheckSelfPermission(permission)时,会得到异常Java.Lang.NullPointerException(尝试对空对象引用调用虚拟方法“int-android.content.Context.CheckSelfPermission(Java.Lang.String)”)。 为什么? 请帮帮我 public void GetLocationPermission() { string permission = Manifest.

调用方法CheckSelfPermission(permission)时,会得到异常Java.Lang.NullPointerException(尝试对空对象引用调用虚拟方法“int-android.content.Context.CheckSelfPermission(Java.Lang.String)”)。 为什么? 请帮帮我

    public void GetLocationPermission()
    {
        string permission = Manifest.Permission.AccessFineLocation;

        if (CheckSelfPermission(permission) == (int)Permission.Granted)
        {               
            GetLocation();
            return;
        }

        RequestPermissions(PermissionsLocation, RequestLocationId);
    }

    readonly string[] PermissionsLocation =
    {
        Manifest.Permission.AccessCoarseLocation,
        Manifest.Permission.AccessFineLocation
    };

    const int RequestLocationId = 0;

根据我的经验,这种情况下的NullPointerException是由于
活动
设置不正确造成的

确保扩展
活动
,并按如下方式添加属性:

[Activity(Label = "MyClass")]
class MyClass: Activity`
此外,当使用时,请求权限变得非常容易

您现在要做的是:

[Activity(Label = "MyClass")]
class MyClass: Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        Platform.Init(this, savedInstanceState);
    }

    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    public async Task<PermissionStatus> CheckAndRequestLocationPermission()
    {
        var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
        if (status != PermissionStatus.Granted)
        {
            status = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
        }

        // Additionally could prompt the user to turn on in settings

        return status;
    }
}

[活动(Label=“MyClass”)]
类别MyClass:活动
{
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Platform.Init(这是savedInstanceState);
}
public override void OnRequestPermissionsResult(int-requestCode,string[]permissions,Android.Content.PM.Permission[]grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(请求代码、权限、GrantResult);
base.OnRequestPermissionsResult(请求代码、权限、GrantResult);
}
公共异步任务检查和请求定位权限()
{
var status=等待权限。CheckStatusAsync();
if(status!=PermissionStatus.grated)
{
status=wait Permissions.RequestAsync();
}
//此外,还可以提示用户在设置中启用
返回状态;
}
}
您还需要确保您的
main活动
具有与
OnRequestPermissionsResult
相同的覆盖,如果您没有手动创建项目,则默认情况下应该具有该覆盖


进一步阅读:

您正在使用哪种类型的活动?AppCompatActivity?请尝试
if(PackageManager.CheckPermission(Manifest.Permission.AccessFineLocation,PackageName)=权限。已授予
,并确保您使用的Android版本允许检查权限。也许您可以检查。