2

CLLocationManager を使用して、ユーザーの現在の GPS 位置をフォアグラウンドとバックグラウンドで更新したいと考えています。info.plist とターゲット機能の下でロケーション バックグラウンド モードを使用するためのアプリを登録しました。iPhone シミュレーターではすべて正常に動作しますが、実際の iPhone では、アプリがバックグラウンドにあるときに関数 didUpdateLocations が 2 回呼び出されるだけです。Xcode で GPS データをシミュレートする gpx ファイルを使用します。アプリがフォアグラウンドにあるときに機能し、MapView で進行状況を確認できます。

これは私のViewControllerのコードです:

lazy var locationManager: CLLocationManager! = {
    let manager = CLLocationManager()
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.delegate = self
    manager.requestAlwaysAuthorization()
    manager.pausesLocationUpdatesAutomatically = false
    //manager.distanceFilter = 250
    return manager
}()



//Location manager delegate function

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    if(UIApplication.sharedApplication().applicationState == .Background){
        print("background call")
    }else{
        print("foreground call")
    }

    // Save GPS coordinates
    saveGpsCoordinates(locations[0])
}

私が使用している: iPhone 5 と Xcode 7.0 ベータ 5 の IOS 9

実際のデバイスでバックグラウンドのデリゲート呼び出しを受け取らない理由を誰かが知っていますか?

ありがとう。

4

4 に答える 4

2

iOS9に移行した後、同様の問題が発生しました。

以下の質問への回答に記載されているように、allowsBackgroundLocationUpdates を YES に設定していることを確認してください。

iOS9 の CLLocationManager の allowBackgroundLocationUpdates

于 2015-12-22T22:56:11.567 に答える
0

pausesLocationUpdatesAutomatically を TRUE に設定してください。これが FALSE に設定されていると、同じように見える場所であっても、より多くの場所の更新を取得できるためです。

TRUE もデフォルト値です。

于 2015-10-07T09:50:24.210 に答える
0

2つのこと:

  1. あなたのコードのどこにも への呼び出しはありませんstartUpdatingLocation

  2. (1が正しいと仮定して)場所をシミュレートするためにGPXファイルを使用していると言いました.場所をシミュレートするためにGPXファイルを使用している場合、locationManager場所を取得するために を使用していないstartUpdatingLocation.フォアグラウンドまたはバックグラウンドで。

于 2015-09-04T15:11:00.213 に答える