我有三点,但实际上只有第一点是最重要的
为了保持电池寿命,我试图让locationManager打开足够长的时间以获取用户的位置,然后关闭。这样做的最佳方法是什么?
我并不总是需要知道用户的位置,但在用户点击搜索时拥有相对准确的位置很重要(可能在几十个街区内,10,000米,甚至可能更不准确)。 / p>
我正在向服务器发送请求然后获取结果,在延迟之后,我需要一个更准确的用户位置版本(在100米之内就可以了)。
我不知道这有多少太挑剔了,但如果最后两点是可行的/有效的电池,那么请让我知道怎么做!
答案 0 :(得分:2)
当CLLocationManager
代表收到符合您所需准确度的位置更新时,您可以轻松停止跟踪位置。
要开始更新位置,请执行以下操作:
CLLocationManager *locationManager = [CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];
然后实施适当的CLLocationManagerDelegate
方法:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *foundLocation = [locations lastObject];
if (foundLocation && foundLocation.horizontalAccuracy < kYourDesiredAccuracyInMetres)
{
[manager stopUpdatingLocation];
//Do whatever else with the location you've established
}
}
您应该能够通过检查返回的返回位置的准确性并停止更新或让它们继续(如果您需要更高的准确性)来调整满足您的要求。
在开始更新位置时设置计时器也是个好主意,如果在设定的时间内没有找到位置,则停止更新。您还应该实现locationManager:didFailWithError:
委托方法来检查您是否可以访问位置服务。
答案 1 :(得分:1)
在检索到用户的位置信息后,可以停止LocationManager。
CLLocationManager* locationManager = [ [ CLLocationManager alloc] init];
locationManager.delegate = self; //we must implement the protocol
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.headingFilter = kCLHeadingFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
//To turn on gps (if it isn't on already)
[locationManager startUpdatingLocation];
//To turn gps off (if no other apps are listening)
[locationManager stopUpdatingLocation];