29

私のアプリケーションは、バックグラウンドでユーザーの場所の変化を追跡する必要があり、ユーザーが移動している限り正常に動作します。ユーザーがCLLocationManager10 ~ 20 分程度で停止して一時停止したとき。それはこの通知によって示されます:

-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager{}

そして、これも私には問題ありません。いいですね、バッテリーなどを節約します。

問題は、CLLocationManagerユーザーが再び移動を開始したときにウェイクアップせず、アプリケーションをフォアグラウンドに配置する(アクティブになる)まで、次のデリゲート メソッドが起動されないことです。

//Never called back after CLLocationManager pauses:
-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager{}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{}

locationManagerDidResumeLocationUpdatesデバイスが再び動き始めた後に呼び出されないのはなぜですか? GPSも自動的に再開すべきではありませんか(自動的に一時停止されたため)? ユーザーの操作なしで GPS を再開する方法はありますか?

アプリケーションは、Info.plist ファイルで次のように宣言されています。

ここに画像の説明を入力

そして、私の CLLocationManager 設定は次のとおりです。

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setActivityType:CLActivityTypeFitness];
//I WANT pauses to save some battery, etc... That is why following line is commented out (default)
 //[locationManager setPausesLocationUpdatesAutomatically:NO];
 locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;
 locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
 [locationManager startUpdatingLocation];
4

3 に答える 3

3

アップルのドキュメントは、そのトピックについて非常に弱いです。プロパティpausesLocationUpdatesAutomaticallyにより、ユーザーが GPS を必要としないと Apple が判断した場合、Apple は GPS をシャットダウンできます。

文書化されていませんが、このプロパティを設定すると、バックグラウンド モードで GPS が停止するようです。

さまざまな投稿で、そのプロパティの問題が説明されています: 、例:
iOS 6 CoreLocation does not work

iOS 6ではAutoPause が機能しない Stanislav Dvoychenko が Apple の推奨事項を投稿しています。

[更新 - 2013 年 3 月 4 日]。iOS6 での場所の変更に関する Apple のプレゼンテーションを調べたところ、地域の変更イベントを取得したら、地域の変更の監視を使用して「一時停止を解除」することを提案しています。これは私のシナリオには適していませんが、ユーザーはそのようなイベントが発生するまで 1 ~ 2 キロメートル移動/実行/運転する可能性があるためです。

そのプロパティを false に設定することをお勧めします。

于 2013-07-07T08:43:48.567 に答える
1

可能であれば、startMonitoringSignificantLocationChanges を使用してください (Apple):

このサービスを開始した後にアプリケーションが終了した場合、新しいイベントが到着すると、システムはアプリケーションをバックグラウンドで自動的に再起動します。

アプリが起動したら、これをよりきめ細かい追跡と組み合わせることができます (たとえば、ユーザーが再入力するなど)。

于 2013-07-13T12:24:40.210 に答える