iOS:单击按钮获取坐标,然后停止所有位置服务

Posted

技术标签:

【中文标题】iOS:单击按钮获取坐标,然后停止所有位置服务【英文标题】:iOS: Get Coordinates on button click, then stop all location services 【发布时间】:2014-08-18 17:33:12 【问题描述】:

现在,我有它,所以当单击按钮时,它会启动定位服务,设置纬度/经度变量。但定位仍在后台继续运行。

我想要的是,当我点击一个按钮时,它会找到纬度/经度,所有定位服务都会停止。

这是我目前拥有的。

- (IBAction)startButton:(id)sender 

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
    NSLog(@"%@", [self lat]);


- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    NSLog(@"didFailWithError: %@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc]
                               initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];


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

    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) 
        [self setLat:[NSString stringWithFormat:@"%.6f", currentLocation.coordinate.latitude]];
    

另一个问题是,如果我立即尝试检索 lat 属性的值,它会返回 null,很可能是因为需要一两秒才能找到位置。

所以我还需要停止运行任何进一步的代码,直到设置 lat/long 属性。例如,我将如何阻止 otherFunction 运行直到找到纬度/经度:

- (IBAction)startButton:(id)sender 

    [self updateLocation];
    [self otherFunction];


- (void)updateLocation

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];


- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    NSLog(@"didFailWithError: %@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc]
                               initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];


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

    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) 
        [self setLat:[NSString stringWithFormat:@"%.6f", currentLocation.coordinate.latitude]];
[locationManager stopUpdatingLocation]
    

任何帮助/想法将不胜感激!

【问题讨论】:

调用[locationManager stopUpdatingLocation] 应该会阻止它。您可以检查lat 值(和longitude)以了解何时停止它。你试过什么? @Larme:是的,这行得通,但是关于我的第二段代码,如何防止 [self otherFunction] 在设置 lat/long 之前运行? 在获得位置时调用 otherFunction(即,在您停止更新位置之后。 @Larme: otherFunction 必须由按钮触发。编辑:也许不是,可能结构不同 【参考方案1】:

在您的最后一个函数中,在您验证 currentLocation 不为零后,您应该检查 currentLocation 的准确性,然后调用您的 setLat: 函数,然后停止更新位置。有关详细信息,请参阅此帖子:

CLLocationManager and accuracy issues - any experiences?

【讨论】:

以上是关于iOS:单击按钮获取坐标,然后停止所有位置服务的主要内容,如果未能解决你的问题,请参考以下文章

如何获取地理位置然后自动提交表单而无需单击按钮

通过单击android studio中的按钮将我的当前位置发送给所有用户

Jquery滑块在按钮单击时更新滑块位置时停止滑动

如何使用开始和停止 UIButtons 连续跟踪位置坐标并查找距离 [关闭]

使用 FusedLocationProviderClient 获取按钮单击的最后一个已知位置

WinRT Geolocator 总是返回相同的位置