有谁知道如何以编程方式关闭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吗?
答案 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;
}