问题描述
我在我的 xamarin 应用程序中使用 CrossGeolocator.Current.StartListeningAsync 方法,以便能够在 iOS 的后台监听位置更新。
我正在使用 Essentials 请求权限。
在第一次运行时,我们使用 Essentials 获得位置许可(仅在应用程序中)和位置,然后我们使用 StartListeningAsync for 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;
}