C# 如何在Xamarin.Android中请求权限?
我一直在stackoverflow和Xamarin论坛上搜索,但我找到的所有代码都不起作用。大多数关键字都会出现错误:“x在当前上下文中不存在”,我找不到包含它们的命名空间或库。我是Xamarin的新手,如果这是个愚蠢的问题,我很抱歉 您可以删除项目中的文件夹C# 如何在Xamarin.Android中请求权限?,c#,android,forms,xamarin,xamarin.android,C#,Android,Forms,Xamarin,Xamarin.android,我一直在stackoverflow和Xamarin论坛上搜索,但我找到的所有代码都不起作用。大多数关键字都会出现错误:“x在当前上下文中不存在”,我找不到包含它们的命名空间或库。我是Xamarin的新手,如果这是个愚蠢的问题,我很抱歉 您可以删除项目中的文件夹bin和obj,然后重新构建并重新构建它 对于请求权限,您可以从nuget安装插件plugin.Permissions 用法 试试看 { var status=await CrossPermissions.Current.CheckPerm
bin
和obj
,然后重新构建并重新构建它
对于请求权限,您可以从nuget安装插件plugin.Permissions
用法
试试看
{
var status=await CrossPermissions.Current.CheckPermissionStatusAsync();
if(status!=PermissionStatus.grated)
{
if(wait CrossPermissions.Current.shouldShowRequestPermissionOriginaleAsync(Permission.Location))
{
//古纳需要那个位置
}
status=wait CrossPermissions.Current.RequestPermissionAsync();
}
if(status==PermissionStatus.grated)
{
//查询权限
}
else if(状态!=PermissionStatus.Unknown)
{
//位置被拒绝
}
}
捕获(例外情况除外)
{
//出了点问题
}
有关该插件的更多详细信息,请查看注意
如果遵循此操作,则不必添加任何额外插件,下面的示例显示了如何处理位置权限
在OnCreate方法中,检查现有权限:
if (!(CheckPermissionGranted(Manifest.Permission.AccessCoarseLocation) &&
CheckPermissionGranted(Manifest.Permission.AccessFineLocation)))
{
RequestLocationPermission();
}
else
{
InitializeLocationManager();
}
InitPageWidgets();
其中授予检查权限的方法如下:
[Export]
public bool CheckPermissionGranted(string Permissions)
{
// Check if the permission is already available.
if (ActivityCompat.CheckSelfPermission(this, Permissions) != Permission.Granted)
{
return false;
}
else
{
return true;
}
}
private void RequestLocationPermission()
{
if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.AccessFineLocation))
{
// Provide an additional rationale to the user if the permission was not granted
// and the user would benefit from additional context for the use of the permission.
// For example if the user has previously denied the permission.
ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);
}
else
{
// Camera permission has not been granted yet. Request it directly.
ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);
}
}
请求权限代码如下所示:
[Export]
public bool CheckPermissionGranted(string Permissions)
{
// Check if the permission is already available.
if (ActivityCompat.CheckSelfPermission(this, Permissions) != Permission.Granted)
{
return false;
}
else
{
return true;
}
}
private void RequestLocationPermission()
{
if (ActivityCompat.ShouldShowRequestPermissionRationale(this, Manifest.Permission.AccessFineLocation))
{
// Provide an additional rationale to the user if the permission was not granted
// and the user would benefit from additional context for the use of the permission.
// For example if the user has previously denied the permission.
ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);
}
else
{
// Camera permission has not been granted yet. Request it directly.
ActivityCompat.RequestPermissions(this, PermissionsLocation, REQUEST_LOCATION);
}
}
接受或拒绝此权限后,将调用此方法:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions,
Android.Content.PM.Permission[] grantResults)
{
Log.Info(Tag, "onRequestPermissionResult");
if (requestCode == RequestPermissionsRequestCode)
{
if (grantResults.Length <= 0)
{
// If user interaction was interrupted, the permission request is cancelled and you
// receive empty arrays.
Log.Info(Tag, "User interaction was cancelled.");
}
else if (grantResults[0] == PermissionChecker.PermissionGranted)
{
// Permission was granted.
Service.RequestLocationUpdates();
}
else
{
// Permission denied.
SetButtonsState(false);
Toast.MakeText(this, "Permission Denied", ToastLength.Long).Show();
}
}
}
public override void OnRequestPermissionsResult(int-requestCode,字符串[]权限,
Android.Content.PM.Permission[]grantResults)
{
Log.Info(标记“onRequestPermissionResult”);
if(requestCode==RequestPermissionsRequestCode)
{
如果(grantResults.Length嗨,首先请编写代码,而不是发布屏幕截图,其次请共享您的清单。xmlplease read before postingI查看插件,它似乎不支持读取外部存储和写入外部存储。这些是我需要的权限。抱歉,我没有指定,我认为它工作原理相同在名为StoragePermission
的插件中。哦,好吧,我没有注意到我认为我缺少了一个名称空间或其他东西,(这在MainActivity.cs中)Manifest、InitializeLocationManager、InitPageWidgets和ActivityCompat都抛出了错误:“x在当前上下文中不存在”是的,因为这些是伪方法,它们不存在,它们只是让您了解需要做什么,您需要的唯一名称空间是使用Android.Support.V4.App;