2017-07-12 10 views
2

ユーザーが20〜30メートルの自宅にいることを知る必要があるiOS用のアプリを構築しています。位置情報の更新がバックグラウンドで停止する - iOS

ユーザーが自宅から500m離れたところでイベントをトリガーするユーザージオフェンス、次にCLLocationManagerを使用して実際の場所を追跡し、自宅までの距離をチェックします。

私の問題は、アプリケーションがバックグラウンドになっている間にジオフェンスイベントから「startUpdatingLocation」を呼び出すと、20秒間だけ実行され、コールバックを停止することです。 私は、20秒後にアプリを開いてバックグラウンドに戻した後、私はそれを止めるまでコールバックを与え続けます。 アプリが実行されている間に「startUpdatingLocation」を呼び出してバックグラウンドに置くと、それは実行されたままになります。

初期化のための私のコードは次のようになります。私は場所のためのバックグラウンドモードを有効にし、含まれている

func startFetchingUserLocation() { 
    if (!isFetchingLocation) { 
     isFetchingLocation = true 
     DanaDebugger.presentDebugPushMessage(message: "fetching new location") 
     locationManager.startUpdatingLocation() 
    } 
} 

init(config: AutounlockConfiguration) { 
    super.init() 

    self.config = config 

    self.locationManager = CLLocationManager() 

    self.locationManager.requestAlwaysAuthorization() 
    self.locationManager.requestWhenInUseAuthorization() 

    self.locationManager.delegate = self 
    self.locationManager.pausesLocationUpdatesAutomatically = false 
    self.locationManager.allowsBackgroundLocationUpdates = true 
    self.locationManager.activityType = .automotiveNavigation 
    self.locationManager.distanceFilter = kCLDistanceFilterNone 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation 
} 

と私は場所の更新を開始するとき、私はこのようにそれを行いますinfo.plistファイルのNSLocationAlwaysUsageDescription 私は本当にここからどこに行くのか分からない、誰かが助けてくれることを願っている。

答えて

0
locationManager.startMonitoringSignificantLocationChanges() 

代わりにこのラインの使用このラインを

locationManager.startUpdatingLocation() 

それはあなたの問題

+0

を解決またはその両方を使用します。フォアグラウンドで重要な場所の変更を有効にすることができます。これにより、ジオフェンス内にいるときにバックグラウンドで 'startUpdatingLocation'を呼び出して継続的な更新を得ることができます。 – Paulw11

+0

ありがとう!これはまさに私が必要としていた答えでした!今すぐ完璧に走ります。 –

関連する問題