2016-04-04 8 views
1

私はユーザーが自分の活動をgps追跡できるアプリケーションを持っています。CLLocationManagerがしばらくしてバックグラウンドでアップデートを受け取っていません

バックグラウンドのGPSアップデートではすべてが正常に動作しますが、非常にまれなケース(1000分の1)があり、私のアプリがバックグラウンドのときにはCLLocationManagerからのアップデートコールを受信できません。すぐにではなく、しばらくしてから。

私のアプリはアップデートの受信を開始してから、突然(数分または数時間の追跡が可能です)、それ以上の場所のアップデートはありません。アプリが再びアクティブになるとすぐに場所の報告が続けられます。もちろん、欠けている場所は悪いです!

いつ、なぜそれが起こったのか分かりませんでした。だから、他の誰かが同じ問題を経験しているかどうか尋ねたいのです。私はそれが通話やそれが中断しているようなものではないと言うことができます。私はdidFailデリゲートメソッドでコールバックも取得しません。私はもう何も得られません.... 大きな問題は、私が目的を持って再現することができないので、それをデバッグする方法についてのアイディアがないことです。

ご協力いただきありがとうございます。

EDIT:ここ

だどのように私のセットアップ私の場所マネージャを起動し、録画ボタンが

[self.locationManager startUpdatingLocation]; 

EDIT 2を打っているし、後で

self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.delegate = self; 

self.locationManager.distanceFilter = kMinimumDistanceFilter; 
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
self.locationManager.pausesLocationUpdatesAutomatically = NO; 
self.locationManager.activityType = CLActivityTypeFitness; 

[self.locationManager requestWhenInUseAuthorization]; 
[self.locationManager requestAlwaysAuthorization]; 

if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) 
{ 
    self.locationManager.allowsBackgroundLocationUpdates = YES; 
} 

と:

このサービスを開始してアプリが一時停止された場合、アプリはアプリが再び実行されるまで( フォアグラウンドまたはバックグラウンド)、 イベントの配信を停止します。あなたのアプリが終了した場合、新しいロケーションイベントの配信 が完全に停止します。したがって、バックグラウンドで位置イベントを受信するためにアプリに が必要な場合は、 UIBackgroundModesキー(位置値付き)をInfo.plist ファイルに含める必要があります。

私はバックグラウンドでもstartUpdatingLocationしません...しかし、それは私のアプリに起こっているようです。アプリが停止されている場合、どのように追跡を開始することができますか?それは不可能ですね。中断された原因はコードを実行していないことを意味しますか?

+0

あなたのロケーションマネージャを設定するコードを表示できますか?フォアグラウンドまたはバックグラウンドで 'startUpdatingLocation'を呼び出しますか?重要な場所の監視を有効にしましたか? http://stackoverflow.com/questions/20187700/startupdatelocations-in-background-didupdatingtolocation-only-called-10-20-time – Paulw11

+0

私はいくつかのコードで質問を更新します。助けを求めるThx! 'startUpdatingLocation'はメインスレッドで呼び出され、またアプリケーションがフォアグラウンドになっている間も呼び出されます。私も重要な場所の監視を使用していません... – Georg

+0

あなたのアプリがリニューアルされた場合(つまり、場所のキーが 'didFi ishLaunchingWithOptions'に渡された辞書に存在する場合)、あなたのロケーションマネージャを正しく再設定しますか? – Paulw11

答えて

1

Info.plistallowsBackgroundLocationUpdatesYESに設定しましたか?ドキュメントから

デフォルトでは、これは関係なく、最低限のデプロイメント・ターゲットの、後でのiOS 9.0または に対してリンクされたアプリケーションのためのNOです。バックグラウンドで継続する目的で -startUpdatingLocationを呼び出すたびInfo.plistファイルの「場所」を含むように設定UIBackgroundModesで

、あなた も、実行時にこのプロパティをYESに設定する必要があります。

UIBackgroundModesに "location"が含まれていない場合、このプロパティをYESに設定すると致命的なエラーになります。

このプロパティをNOにリセットすることは、UIBackgroundModes値から "location" を省略することと同じです。アプリケーションが実行中(つまり中断されていない)で、 に十分な権限がある場合(つまり、WhenInUse権限を持ち、 が使用されているか、または常に許可されている)、場所へのアクセスはまだ です。しかし、アプリはまだ 通常のタスクの中断のルールの対象になります。

可能な権限値の詳細については、 の-requestWhenInUseAuthorizationおよび-requestAlwaysAuthorizationを参照してください。

+0

私は言ったように、それは追跡の1000倍の999で働いています。私の質問は、私のCLLocationManagerが場所の更新を時折報告するのを止めさせる原因になっているのでしょうか? – Georg

+1

'AllowBackLocationUpdates'は' 'Info.plist'ではなく、' CLLocationManager'のプロパティです(https://developer.apple.com/reference/corelocation/cllocationmanager/1620568-allowsbackgroundlocationupdates)。 – bcattle

関連する問題