【问题标题】:Xamarin. Android permissions. CheckSelfPermission() exception Java.Lang.NullPointerException赛马林。安卓权限。 CheckSelfPermission() 异常 Java.Lang.NullPointerException
【发布时间】:2017-09-14 10:46:30
【问题描述】:

当我调用方法 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;

【问题讨论】:

  • 您使用的是什么类型的活动? AppCompatActivity?
  • 试试if (PackageManager.CheckPermission(Manifest.Permission.AccessFineLocation, PackageName) == Permission.Granted并确保您使用的Android版本允许检查权限
  • 也许你可以查看this

标签: c# xamarin permissions xamarin.android


【解决方案1】:

根据我的经验,这种情况下的 NullPointerException 源于 Activity 未正确设置。

确保扩展 Activity 并按如下方式添加属性:

[Activity(Label = "MyClass")]
class MyClass: Activity`

此外,使用Xamarin.Essentials 1.4.0 时,请求权限变得更加容易。

你现在要做什么:

[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;
    }
}

您还需要确保您的 MainActivity 具有与 OnRequestPermissionsResult 相同的覆盖,如果您没有手动创建项目,则默认情况下应该具有该覆盖。

延伸阅读:Xamarin.Essentials: Permissions

【讨论】:

    猜你喜欢
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2015-03-23
    • 2017-10-15
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多