Pau*_*els 5 c# android xamarin xamarin.forms
我正在使用权限插件来请求Android上的精确位置权限;但是,每次我调用CheckPermissionsAsync时,都会收到拒绝的响应。这是我正在使用的代码:
protected override async void OnStart()
{
PermissionStatus status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.LocationWhenInUse);
if (status == PermissionStatus.Unknown)
{
var result = await CrossPermissions.Current.RequestPermissionsAsync(Permission.LocationWhenInUse);
}
}
Run Code Online (Sandbox Code Playgroud)
这是在模拟器上运行的,据我所知,我尚未设法执行RequestPermissionsAsync调用。
这是预期的行为吗?如果是这样,我该如何区分“拒绝”(尚未询问)和“拒绝”(询问和拒绝)?
编辑:
在进一步调查中,呼叫RequestPermissionsAsync似乎没有任何区别。我的印象是它将转到本机平台并显示“我们需要权限..”对话框。再次查看该插件的示例,似乎答案是仅显示设置并让用户分配他们的想法;答案似乎差不多。感觉很像我在这里错过了难题的关键部分。
编辑:
我创建了这个问题的基本复制在这里(很明显,我已经删除了谷歌地图键)。
编辑:
遵循@FreakyAli的建议,我最终完成了一个(或多或少)如下所示的主要活动:
if (ActivityCompat.ShouldShowRequestPermissionRationale(this,
Manifest.Permission.AccessFineLocation))
{
}
else
{
ActivityCompat.RequestPermissions(this,
new String[] { Manifest.Permission.AccessFineLocation },
PERMISSIONS_REQUEST_LOCATION);
}
Run Code Online (Sandbox Code Playgroud)
这行得通,但是感觉就像我在复制插件的功能。
请确保您已在 Activity OnCreate 方法中添加以下代码:
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
Run Code Online (Sandbox Code Playgroud)
向清单文件添加位置权限。
2.检查权限状态,并请求权限。
private async void Btn1_Click(object sender, System.EventArgs e)
{
var status = PermissionStatus.Unknown;
try
{
status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status != PermissionStatus.Granted)
{
if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
{
Console.WriteLine("Need location", "Gunna need that location", "OK");
}
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
status = results[Permission.Location];
}
if (status == PermissionStatus.Granted)
{
//do something about location.
}
else if (status != PermissionStatus.Unknown)
{
Console.WriteLine("Location Denied", "Can not continue, try again.", "OK");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
重写 OnRequestPermissionsResult 方法。
public override void OnRequestPermissionsResult(int requestCode, string[]
permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
Run Code Online (Sandbox Code Playgroud)4. 在 Activity 的 OnCreate 方法中设置以下内容。
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |