テスト用に IOS 7.1 を搭載した iPhone5s を使用しています。locationManagerDidPauseLocationUpdates デリゲートを使用してメソッドを呼び出し、ジオフェンスをセットアップします。
- (void) monitorForDepartureFromLastKnownStoppedLocation:(Locations *)lastKnownLocation
{
CLLocationCoordinate2D lastLocation = CLLocationCoordinate2DMake(lastKnownLocation.latitude, lastKnownLocation.longitude);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:lastLocation
radius:300
identifier:@"departure from last stopped location"];
region.notifyOnEntry = NO;
region.notifyOnExit = YES;
[monitorSignificantChangeObject.locationManager startMonitoringForRegion:region];
}
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
これにより、ユーザーが領域を出るときにデリゲート メソッドが呼び出されます。
次のシナリオではすべてが機能します。
- フォアグラウンドのアプリ。
- バックグラウンドでアプリ。
- アプリがバックグラウンドまたはフォアグラウンドでロックされている画面。
次のシナリオでは正しく機能しません。
ジオフェンスが終了し (つまり、didExitregion が起動する必要があります)、画面がロックされ、画面がオフになっています (つまり、画面が黒く、これは画面ロックの数秒後に発生します)。このシナリオでは、didExitRegion はまったく起動しません。ただし、ホームボタンを押すとすぐに画面が表示されます(まだロックされています)がすぐにdidexitRegionがトリガーされます。
これは正常な動作ですか、それとも何か不足していますか?