gpt4 book ai didi

c# - CheckPermissionsAsync 总是在 Android 上返回 Denied

转载 作者:太空狗 更新时间:2023-10-29 23:28:11 26 4
gpt4 key购买 nike

我正在使用 Permissions Plugin在 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);
}
}

这是在模拟器上运行的,据我所知,我还没有设法执行 RequestPermissionsAsync 调用。

这是预期的行为吗?如果是这样,我如何区分拒绝(尚未询问)和拒绝(询问并拒绝)?

编辑:

在进一步调查中,无论哪种方式,调用 RequestPermissionsAsync 似乎都没有任何区别。我的印象是它会转到 native 平台并显示“我们需要权限..”对话框。再次查看 samples a bit more for this plug-in ,看起来答案似乎是只显示设置,让用户随心所欲地分配;感觉很像我在这里遗漏了拼图的关键部分。

编辑:

我已经创建了问题的基本副本 here (显然我已经删除了 Google map key )。

编辑:

按照@FreakyAli 的建议,我最终得到了一个看起来像这样(或多或少)的主 Activity :

if (ActivityCompat.ShouldShowRequestPermissionRationale(this,
Manifest.Permission.AccessFineLocation))
{

}
else
{
ActivityCompat.RequestPermissions(this,
new String[] { Manifest.Permission.AccessFineLocation },
PERMISSIONS_REQUEST_LOCATION);
}

这行得通,但感觉就像我在复制插件的功能。

最佳答案

请确保您已在 Activity 的 OnCreate 方法中添加以下代码:

 Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);
  1. 向 list 文件添加位置权限。

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());
}
}
  1. 重写 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);
    }

4.在您的 Activity 的 OnCreate 方法中设置以下内容。

 Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState);

关于c# - CheckPermissionsAsync 总是在 Android 上返回 Denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com