2017-03-29 12 views
0

要件: トリガー位置更新アプリケーションがバックグラウンドのときに毎秒後にコールバックが発生する。iOSの位置情報がバックグラウンドモードで一貫してトラバーグされない

問題: ロケーション1秒ごとにコールバックが発生しません。代わりに、時々1秒後に、時には4秒後に、また40-50秒の間隙でさえ、時々不一致になります。

現在の実装:

setActivityType = CLActivityTypeOther 
setAllowsBackgroundLocationUpdates = YES 
setDesiredAccuracy = kCLLocationAccuracyBestForNavigation 
setDistanceFilter = kCLDistanceFilterNone 
setPausesLocationUpdatesAutomatically = false 

plistの構成も、背景の位置情報の更新のために行わ。

さらにこの問題の解決策を達成するために実行できることをお勧めしますか?重要な場所の変更が発生しているとき

+0

どちらのオプションあなたが場所を更新するために使用されています。それは 'startMonitoringSignificantLocationChanges'か' startUpdatingLocation'ですか? – Poles

+0

さて、あなたは 'Capabilites'の' Background Modes'セクションで 'Location updates'をオンにしましたか? – Poles

+0

@Poles:私はstartUpdatingLocationメソッドを使用しています。はい私はCapabilitiesセクションのLocationフラグをオンにしました。 – Amish

答えて

0

は、バックグラウンドの場所のupdationためのコードの下に試してみてください:

#pragma mark - CLLocationManager 

- (void)startContinuosLocationUpdate 
{ 
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; 

    if (status == kCLAuthorizationStatusDenied) 
    { 
     NSLog(@"Location services are disabled in settings."); 
    } 
    else 
    { 
     // for iOS 8 
     if ([self.anotherLocationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
     { 
      [self.anotherLocationManager requestAlwaysAuthorization]; 
     } 
     // for iOS 9 
     if ([self.anotherLocationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) 
     { 
      [self.anotherLocationManager setAllowsBackgroundLocationUpdates:YES]; 
     } 

     [self.anotherLocationManager startUpdatingLocation]; 
    } 
} 

- (void)stopContinuosLocationUpdate 
{ 
    [self.anotherLocationManager stopUpdatingLocation]; 
} 

- (void)startMonitoringLocation 
{ 
    if (_anotherLocationManager) 
     [_anotherLocationManager stopMonitoringSignificantLocationChanges]; 

    self.anotherLocationManager = [[CLLocationManager alloc]init]; 
    _anotherLocationManager.delegate = self; 
    _anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    _anotherLocationManager.activityType = CLActivityTypeOtherNavigation; 

    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { 
     [_anotherLocationManager setAllowsBackgroundLocationUpdates:YES]; 
    } 
    else if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { 
     [_anotherLocationManager requestAlwaysAuthorization]; 
    } 
    [_anotherLocationManager startMonitoringSignificantLocationChanges]; 
} 

- (void)restartMonitoringLocation 
{ 
    [_anotherLocationManager stopMonitoringSignificantLocationChanges]; 

    if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { 
     [_anotherLocationManager setAllowsBackgroundLocationUpdates:YES]; 
    } 
    else if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { 
     [_anotherLocationManager requestAlwaysAuthorization]; 
    } 
    [_anotherLocationManager startMonitoringSignificantLocationChanges]; 
} 
関連する問題