コアロケーションフレームワークを使用してデバイスを特定し、locationManager:didUpdateToLocation:fromLocation:メソッドがロケーションとともに呼び出された後、ユーザーの追跡を停止します。コアロケーションが受け入れプロンプト後に更新されない
ただし、初めて(初めてのインストールから)アプリを起動します。ロケーションマネージャのstartUpdatingLocationというメッセージを表示すると、ユーザーは位置情報サービスを受け入れるか拒否するかの警告を受け取ります。
私は追跡は私が離れて行くとstartUpdatingLocationが再び通知が入って来始めることに呼び出されたときに、このビューコントローラに戻ってきた場合にのみ、それはだ、始まらない受け入れる
私はlocationManagerを実装しています:。didChangeAuthorizationStatusを:思考をこれは、ユーザーが位置情報サービスを受け入れる(または拒否する)ときにメッセージを受け取るが、そうではないことを意味する。
位置情報サービスのメッセージが消されるとすぐに、誰かが正しい方向に私の位置を更新することができますか?
ありがとうございました。ユーザーの場所が要求されたとき、私は私のロジックをカプセル化するシングルトンクラスを持っているコードサンプル
WITH
UPDATEは、アイデアはCLLocationのタイムスタンプのチェックが行われ、それはあまりにも古いなら、追跡を開始されていますこれは怠惰な負荷、私のCLLocationManager IVARをメッセージとして送られ、
-(void)startTracking{
if(!self.locationManager)
_locationManager = [[CLLocationManager alloc] init];
if([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied){
[self invalidateUserLocation];
}else{
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}
}
新しい場所が受け取っ:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
_userLocation = [newLocation retain];
NSDictionary * info = [NSDictionary dictionaryWithObject:self.userLocation
forKey:@"userLocation"];
[[NSNotificationCenter defaultCenter] postNotificationName:kUserLocationFound
object:self
userInfo:info];
[self stopTracking];
}
停止の追跡:
-(void)stopTracking{
if(!self.locationManager)
return;
[self.locationManager stopUpdatingLocation];
self.locationManager.delegate = nil;
}
ユーザーの場所が必要なビューコントローラーを使用しているときに、私はシングルトンオブジェクトでuserLocationを呼び出します。最近の場合は、CLLocationを返します。それ以外の場合は、nilを返して、再び開始します。最初の更新を受け取ったときにトラッキングを停止します。しかし、これが初めて実行されたときに警告表示が表示され、何も追跡されません。
- (CLLocation*)userLocation
{
if(_userLocation.coordinate.latitude == 0 && _userLocation.coordinate.longitude == 0){
[self startTracking];
return nil;
}else{
NSDate* timeNow = [NSDate date];
NSTimeInterval interval = [timeNow timeIntervalSinceDate:_userLocation.timestamp];
if(interval >10)
[self startTracking];
return _userLocation;
}
}
CLLocationManagerインスタンスでstartUpdatingLocationを呼び出していますか? – jmstone617
そうです、私はCLLocationManagerインスタンスで呼びます。 – Daniel
いくつかのコードを表示できますか? – jmstone617