iPhone使用Objective-C关闭GPS

iPhone使用Objective-C关闭GPS,iphone,gps,Iphone,Gps,有人知道如何通过编程关闭iPhone的GPS吗?一旦我使用CLLocationManager三次读取我的位置,我将停止更新位置,如下代码所示: - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { if((newLocation.horizonta

有人知道如何通过编程关闭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];
}
-(无效)locationManager:(CLLocationManager*)manager
DidUpdateLocation:(CLLocation*)newLocation
fromLocation:(CLLocation*)oldLocation{
如果((newLocation.HorizontalAccurance>0.0f)&&
(新位置。水平精度<7000.0f)){
如果(self.locations.count>3){
[self.locationManager停止更新位置];
}
[self.locations addObject:newLocation];
}

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

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

停止更新位置为位置管理器提供关闭硬件的选项,但这不是保证的。它应该在没有其他人需要硬件时关闭硬件。实际上,它似乎可以按预期工作


stopUpdateLocation是否可能从未被调用过?在上面的代码段中,代码从未被调用过似乎并不合理。

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

我想知道您是否需要额外的线路才能到达:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

停止位置管理器。这就是我所使用的,许多地方都有这两条线。祝你好运。

对我来说,是我的地图实例显示了用户位置,让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;
}

Apple docs表示,如果您的定位精度超过一公里,Location manager将关闭GPS硬件:

例如,将位置事件的所需精度设置为1公里,使位置管理器能够灵活地关闭GPS硬件,并完全依靠WiFi或手机无线电。关闭GPS硬件可以显著节省电力。 从


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

Seconded。是否确实发生了调用?是的,我在调试器中对其进行了测试,并在self.locations.count达到4后调用StopUpdateLocation。是的,我在调试器中对其进行了测试,在self.locations.count达到4后调用StopUpdateLocation。停止更新后,请确保您的位置n manager将被释放。如果需要再次开始更新,请重新创建它。这意味着您的准确性将再次不佳,但应用程序将能够更快地关闭硬件。要重新启动位置管理器,只需添加以下代码--[self.locationManager startUpdatingLocation];self.locationManager.delegate=self;