2

我正在尝试获取一个位置并将其与在线位置进行比较所有在后台发生的我创建的方法使用后台位置服务工作正常但大约一分钟后状态栏中的位置图标消失并且该方法不再被调用

这是代码

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {


    double  lat = newLocation.coordinate.latitude;
    double  lon = newLocation.coordinate.longitude;
    NSURL * locationURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://somedomainname.com/iphoneLocation?lat=%f&lon=%f",lat,lon]];
    NSData * responseData = [NSData dataWithContentsOfURL:locationURL];
    NSString* aStr;
    aStr = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];



    if ([aStr isEqualToString:@"out Of Any Knowen Range"] ){
            UILocalNotification *notify =[[UILocalNotification alloc] init];
            notify.alertAction = [[NSString alloc] initWithString: @"View"];
            notify.fireDate=nil;
            notify.alertBody = [NSString stringWithFormat:@"New Data Occured"];
            notify.soundName = UILocalNotificationDefaultSoundName;
            NSLog(@"Local notification should display");
            [[UIApplication sharedApplication] presentLocalNotificationNow:notify];
        }

}

在 viewDid 加载中我正在使用类似这样的东西

locationManager = [[CLLocationManager alloc] init];

    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    locationManager.delegate = self;

    [locationManager startUpdatingLocation];

    CLLocation *userLocation = [locationManager location];

那有什么问题

4

2 回答 2

1

您需要修改AppName-Info.plist文件,方法是添加一个Required background modes带有 value 项的键App registers for location updates。我认为您在在线连接时应该做的另一件事可能不会很快发生,因此您在线连接、发布位置和等待响应的操作应该在另一个线程中开始,同时如果您从CLLocationManager您的先前的请求尚未完成,请跳过发布新位置...

于 2012-06-24T10:45:52.173 回答
0

我想知道位置管理器是否正在某个地方发布,因此不再发送任何更新。

您是否尝试过将位置管理器设置为视图控制器中的保留属性?

@property (nonatomic, strong) CLLocationManager *locationManager
于 2012-06-24T18:04:59.520 回答