微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xam.Plugin.Geolocator 在首次运行 iOS 14 时永远不会返回

如何解决Xam.Plugin.Geolocator 在首次运行 iOS 14 时永远不会返回

我在我的 xamarin 应用程序中使用 CrossGeolocator.Current.StartListeningAsync 方法,以便能够在 iOS 的后台监听位置更新。

我正在使用 Essentials 请求权限。

在第一次运行时,我们使用 Essentials 获得位置许可(仅在应用程序中)和位置,然后我们使用 StartListeningAsync for ios 能够跟踪位置,如果应用程序在后台前台

当回调被击中时,我们会收到一个弹出窗口,说此应用程序使用后台位置,并为您提供使用它的选项或更改回仅在应用程序中使用的选项。选择任何选项时,回调永远不会完成,后续代码也不会运行。

这是我在使用时获得许可然后开始收听后得到的弹出窗口:

Popup on ios

在手动设置权限后的后续运行中,回调工作。

Xamarin 表单版本:5.0.0.1931 Xamarin 基本版本:1.6.1 地理定位器插件版本:4.6.2-beta 代码示例:

from flask_wtf import FlaskForm
from wtforms import StringField,TextField,SubmitField,FieldList,FormField,SelectField,Form
from wtforms.validators import Datarequired,Length,Optional


class ContactForm(FlaskForm):
    """Contact form."""
    iro = SelectField(
        'IRO',choices=[]
    )
    
    sub_issue = SubmitField('Open an issue')

解决方法

在开始收听位置更新之前,您需要确保权限正常。试试下面的代码:

public async Task GetLocationAsync()
{
    var status = await CheckAndRequestPermissionAsync(new Permissions.LocationAlways());
    if (status != PermissionStatus.Granted)
    {
        // Notify user permission was denied
        return;
    }else{
        await StartListening();
    }
}

public async Task<PermissionStatus> CheckAndRequestPermissionAsync<T>(T permission)
            where T : BasePermission
{
    var status = await permission.CheckStatusAsync();
    if (status != PermissionStatus.Granted)
    {
        status = await permission.RequestAsync();
    }

    return status;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。