3

MyCLLocationManagerは、ユーザーが最初にアプリに入ったときに始まります。私は次のように初期化しています:

self.locationManager = [[CLLocationManager alloc] init];
            self.locationManager.delegate = self;
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
            self.locationManager.distanceFilter = kDistanceFilter;
            self.locationManager.headingFilter = kHeadingFilter;

そして、私はジオフェンシングを使用しています。

.plist で .plist を定義しましたrequired background modes

gpx ファイルを使用してシミュレーターでアプリをテストすると、正常に動作します。ここまでは順調ですね。

ただし、次の 2 つのリンクを読みました。

バックグラウンド タスクから iOS 7 の Location Manager を起動する

バックグラウンド位置情報サービスが iOS 7 で機能しない

ではiOS7、場所が数分間変わらない場合、 はCLLocationスリープ状態になります。

私の質問は次のとおりです。

私はまったく呼び出しません。必要なのは、またはdidUpdateLocationだけです。理論的には、アプリが強制終了された場合や、ユーザーの場所が過去 1 時間変更されておらず、移動することを決定した場合でも機能しますか?didEnterRegiondidExitRegion

4

1 に答える 1

2

あなたの質問にはいくつかの要素があります:

1-以前の回答の内容を再ハッシュしないために、まずこのリンクで私の回答を確認します。ユーザーが移動を停止した場合に停止するコア ロケーションの更新と、その動作を変更する方法を解決するのに役立ちます: iOS7 コア ロケーションが更新されない

2- ユーザーが iOS7 でアプリを (アプリ スイッチャーで上にフリックして) 強制終了した場合、アプリは再起動されないため、電話の再起動後に位置情報の更新も地域監視も再起動されません。一方、メモリ不足のためにアプリが強制終了された場合、iOS はアプリを再起動し、バックグラウンドで位置情報の更新と地域の監視を再開します。また、電話を再起動すると、地域の監視が自動的に再開されます。明らかに、バックグラウンド モードを有効にする必要があります。

3-質問で地域について話しているので、CLCircularRegionを実装していると思います。そうでない場合は、それが最初のステップであり、次に「startMonitoringForRegion」になります。あなたの場合、ユーザーがしばらく移動を停止してから移動を開始した場合でも、アプリが領域に出入りするときにアプリが呼び出されます。

4- locationManager: didDetermineState: forRegion: も必ず使用してください。これにより、アプリは開始時にリージョンの内側か外側かを判断できます。これは、アプリが起動され、リージョンの交差が発生していないことを考えると便利ですが、ユーザーがリージョンの内側にいるか外側にいるかを知ることが重要です。

お役に立てれば

于 2014-01-14T17:15:49.830 に答える