【发布时间】:2015-08-04 10:58:00
【问题描述】:
我的应用需要在应用处于活动状态以及处于非活动状态和被终止时获取用户的位置。当用户的位置靠近商店时,应用必须发送本地通知。
我不确定到底发生了什么,但我无法让我的应用在后台获取位置并在被杀死时唤醒它。
我有一个位置管理器(单例,用于 whenInUse 和 Always 这两种情况),并且我在 .plist 中定义了 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription
我正在做的是:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//The app has been killed/terminated (not in background) by iOS or the user.
if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]){
_locationManager = [CoreLocationManager sharedInstance];
_locationManager.isAppActive = NO;
_locationManager.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
_locationManager.locationManager.activityType = CLActivityTypeOtherNavigation;
if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
[_locationManager addLocationManagerDelegate:self];
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if (_locationManager.locationManager){
_locationManager.isAppActive = YES;
[_locationManager.locationManager stopMonitoringSignificantLocationChanges];
}
_locationManager = [CoreLocationManager sharedInstance];
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
if ([_locationManager.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[_locationManager.locationManager requestWhenInUseAuthorization];
}
[_locationManager addLocationManagerDelegate:self];
[_locationManager.locationManager startUpdatingLocation];
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
_locationManager.isAppActive = NO;
if (_locationManager.locationManager){
[_locationManager.locationManager stopUpdatingLocation];
[_locationManager.locationManager stopMonitoringSignificantLocationChanges];
}
if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager.locationManager requestAlwaysAuthorization];
}
[_locationManager.locationManager startMonitoringSignificantLocationChanges];
}
我做错了吗?我不确定是否有必要使用地理围栏,但对于我使用 startMonitoringSignificantLocationChanges 阅读的内容来说就足够了。
【问题讨论】:
标签: ios objective-c core-location appdelegate