C# 沙马林。Android权限。CheckSelfPermission()异常Java.Lang.NullPointerException
调用方法CheckSelfPermission(permission)时,会得到异常Java.Lang.NullPointerException(尝试对空对象引用调用虚拟方法“int-android.content.Context.CheckSelfPermission(Java.Lang.String)”)。 为什么? 请帮帮我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.
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版本允许检查权限。也许您可以检查。