gpt4 book ai didi

ios - Xamarin iOS - CLLocationManager 在后台以设定的时间间隔获取位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:13:19 25 4
gpt4 key购买 nike

我正在尝试向我的应用程序添加一项功能,该功能需要在设定的时间间隔内获取用户的当前位置。问题是每当我使用 System.Threading.Timer 时,都会创建一个新的 System.Threading.Thread 并使用 Thread.Sleep(),或使用 NSTimer.CreateScheduledTimer 应用程序将在应用程序处于后台时停止运行 CLLocationManager

位置管理器.cs

public class LocationManager
{
protected CLLocationManager locationManager;
/// <summary>
/// Time in milliseconds between location checking.
/// </summary>
private int serviceMillisecondTimeout = 10000;

public LocationManager()
{
this.locationManager = new CLLocationManager();

// iOS 8 additional permissions requirements
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
locationManager.RequestAlwaysAuthorization();
}

locationManager.LocationsUpdated += onLocationUpdated;
locationManager.DistanceFilter = 1;
locationManager.DesiredAccuracy = 1;
}

public CLLocationManager LManager
{
get { return locationManager; }
}

public void startLocationUpdates()
{
if (CLLocationManager.LocationServicesEnabled)
{
locationManager.StartUpdatingLocation();
}
}

public void stopLocationUpdates()
{
locationManager.StopUpdatingLocation();
}

public void onLocationUpdated(object sender, CLLocationsUpdatedEventArgs e)
{
// stop location updates until timer calls StartUpdatingLocation
locationManager.StopUpdatingLocation();

var coordinate = e.Locations[e.Locations.Length - 1].Coordinate;
double lat = coordinate.Latitude;
double lon = coordinate.Longitude;

// do stuff with coordinates

// This will work until the application goes into the background.
// The same thing seems to happen whenever I try creating
// new threads, or any other form of a timer.
//
// Without any sort of timer or new thread, it will call
// StartUpdatingLocation in the background and will
// continue to run indefinitely.
NSTimer t = NSTimer.CreateScheduledTimer(TimeSpan.FromMilliseconds(serviceMillisecondTimeout), delegate
{
if (CLLocationManager.LocationServicesEnabled)
{
locationManager.StartUpdatingLocation();
}
});
}
}

我该怎么做才能设置明确的时间间隔并仍然能够在后台运行位置更新?

最佳答案

平台不支持此功能。您可以在后台或离开设置的地理围栏时订阅重要的位置更改,但您不能强制您的代码在后台以特定时间间隔获取位置修复。这是 iOS 平台的限制/限制,您无能为力。

最接近您想要的可能是 Getting Location Events in the Background .

关于ios - Xamarin iOS - CLLocationManager 在后台以设定的时间间隔获取位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31949539/

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