gpt4 book ai didi

使用定时器的 iOS 应用程序后台位置访问

转载 作者:行者123 更新时间:2023-11-29 11:46:52 24 4
gpt4 key购买 nike

我正在寻找一种解决方案,以在应用程序处于后台时访问/停止定位服务。我的应用程序在发送到后台时会获取连续位置(它可以访问连续位置)。这是应用程序功能所必需的。

所以我想知道一些事情:

  • 我的应用在后台运行时可以持续定位多长时间? (在操作系统杀死后台进程或类似的东西之前)

  • 如果我想添加一个计时器,说 60 分钟后应用将停止获取位置,正确的方法是什么?

最佳答案

可以使用以下代码完成后台位置更新:

在 Appdelegate 类中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {

// This "afterResume" flag is just to show that he receiving location updates
// are actually from the key "UIApplicationLaunchOptionsLocationKey"
self.shareModel.afterResume = YES;

[self.shareModel startMonitoringLocation];
}

return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {

[self.shareModel stopContinuosLocationUpdate];
[self.shareModel restartMonitoringLocation];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {

//Remove the "afterResume" Flag after the app is active again.
self.shareModel.afterResume = NO;

[self.shareModel startContinuosLocationUpdate];
}

在位置更新类中,说 LocationManager.m:

#import <CoreLocation/CoreLocation.h>

@property (nonatomic) CLLocationManager * anotherLocationManager;

- (void)startContinuosLocationUpdate
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

if (status == kCLAuthorizationStatusDenied)
{
NSLog(@"Location services are disabled in settings.");
}
else
{
// for iOS 8
if ([self.anotherLocationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[self.anotherLocationManager requestAlwaysAuthorization];
}
// for iOS 9
if ([self.anotherLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])
{
[self.anotherLocationManager setAllowsBackgroundLocationUpdates:YES];
}

[self.anotherLocationManager startUpdatingLocation];
}
}

- (void)stopContinuosLocationUpdate
{
[self.anotherLocationManager stopUpdatingLocation];
}

- (void)startMonitoringLocation
{
if (_anotherLocationManager)
[_anotherLocationManager stopMonitoringSignificantLocationChanges];

self.anotherLocationManager = [[CLLocationManager alloc]init];
_anotherLocationManager.delegate = self;
_anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_anotherLocationManager.activityType = CLActivityTypeOtherNavigation;

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
[_anotherLocationManager setAllowsBackgroundLocationUpdates:YES];
}
else if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
[_anotherLocationManager requestAlwaysAuthorization];
}
[_anotherLocationManager startMonitoringSignificantLocationChanges];
}

- (void)restartMonitoringLocation
{
[_anotherLocationManager stopMonitoringSignificantLocationChanges];

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
[_anotherLocationManager setAllowsBackgroundLocationUpdates:YES];
}
else if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
[_anotherLocationManager requestAlwaysAuthorization];
}
[_anotherLocationManager startMonitoringSignificantLocationChanges];
}


#pragma mark - CLLocationManager Delegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
if(_dictLocation && [_dictLocation isKindOfClass:[NSDictionary class]])
{
float latitudeValue = [[RVCommon validateDataForNumber:_dictLocation[@"lat"]] floatValue];
float longitudeValue = [[RVCommon validateDataForNumber:_dictLocation[@"lng"]] floatValue];
CLLocation *facilityLocation = [[CLLocation alloc] initWithLatitude:latitudeValue longitude:longitudeValue];
CLLocation *mostRecentLocation = locations.lastObject;

CLLocationDistance distanceInMeters = [mostRecentLocation distanceFromLocation:facilityLocation];
if (distanceInMeters <= 500.0)
{
//Here I am informing the server when user is within 500mts of the coordinate.
}
}

NSLog(@"locationManager didUpdateLocations: %@",locations);
}

关于使用定时器的 iOS 应用程序后台位置访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43275008/

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