iPhone使用Objective-C关闭GPS

时间:2009-10-25 03:20:24

标签: iphone gps

有谁知道如何以编程方式关闭iPhone的GPS?一旦我使用CLLocationManager获取我的位置的三次读取,我就停止更新位置,如下面的代码所示:

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

if((newLocation.horizontalAccuracy >  0.0f) &&
   (newLocation.horizontalAccuracy < 7000.0f) ){

    if(self.locations.count > 3){
        [self.locationManager stopUpdatingLocation];
    }
    [self.locations addObject:newLocation];
}

但是当用户使用我的应用程序并耗尽电池时,这似乎仍然会打开GPS。我需要做的就是读取位置三次,以便我可以获得准确的读数,然后关闭GPS。有人知道如何用Objective-C关闭GPS吗?

6 个答案:

答案 0 :(得分:5)

stopUpdatingLocation为位置管理器提供关闭硬件的选项,但不保证。当没有其他人需要它时,它应该关闭硬件。在实践中,它似乎按照人们的预期工作。

是否有可能永远不会调用stopUpdatingLocation?在上面的代码段中,您的代码永远不会进入该调用,这看起来并不合理。

答案 1 :(得分:3)

我想知道你是否还需要额外的一行来实现:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

停止位置管理员。这是我使用的,许多地方将这两条线放在一起。祝你好运。

答案 2 :(得分:3)

Apple docs表示,如果您的位置准确度超过一公里,位置管理员将关闭GPS硬件:

  

例如,将位置事件的所需精度设置为一公里,可使位置管理员灵活地关闭GPS硬件并仅依靠WiFi或手机无线电。关闭GPS硬件可以显着节省电力。   来自CLLocation class references

请注意,您应该仅使用标准(非重要)位置更改跟踪。

答案 3 :(得分:0)

第三方应用程序不应该触及硬件设置,所以我猜你不能这样做。

答案 4 :(得分:0)

stopUpdateLocation方法应具有所需的效果。您是否尝试过它是否被调用(您可以通过在行处设置断点来实现此目的)。

答案 5 :(得分:0)

对我来说,是我的地图实例显示了持有GPS的用户位置。对于那些没有任何运气而尝试以上所有内容的人来说,这可能是一个提示。

这是我的stopGPS()函数:

-(void) stopGPS
{
   NSLog(@"Stopgps");

   myMap.delegate = nil;
   myMap.showsUserLocation = NO;
   myMap = nil;

   [locationManager stopMonitoringSignificantLocationChanges];
   [locationManager stopUpdatingHeading];
   [locationManager stopUpdatingLocation];
   locationManager.delegate = nil;
   locationManager = nil;
}