ユーザーの位置の地図を表示し、アプリがバックグラウンドに移動するまでユーザーを追跡するアプリがあります。その時点で、場所の管理者は、場所の更新を停止し、代わりに地域 (最後の既知の場所から半径 100 メートル) を監視するように指示されます。iOS シミュレーターでは、期待どおりに動作し、ジオフェンシング インジケーターが表示されます (通常の位置情報サービス インジケーターと同じですが、アウトラインのみ)。iPhone では、期待どおりに動作しているように見えますが、アウトラインだけではなく、通常の位置情報サービス アイコンが表示されます。
これが起こっている可能性がある理由はありますか?シミュレーターと電話の間のこの不一致? 電話が実際にジオフェンシングのみを使用し、他のサービスを使用していないことを確認したいだけです(つまり、バッテリーの使用量を最小限に抑えるため)。
追加情報:
位置情報の更新を受信するには、バックグラウンド モードを設定する必要があります。これは、常にではなく、特定のケース (ユーザーが有効にした場合) に限られます。ただし、これを無効にしようとしましたが、問題は解決しません。
アプリのバックグラウンド化に使用しているコード:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
// Only monitor significant changes – unless specified
if(!self.viewController.userSpecifiedToUseLocationServices)
{
// Stop using full location services
[self.viewController.locationManager stopUpdatingLocation];
// Create a boundary -- a circle around the current location
self.viewController.currentBoundary = [[CLRegion alloc] initCircularRegionWithCenter:self.viewController.locationManager.location.coordinate radius:kSignificantLocationChange identifier:@"Current Location Boundary"];
// Monitor the boundary
[self.viewController.locationManager startMonitoringForRegion:self.viewController.currentBoundary desiredAccuracy:kCLLocationAccuracyBest];
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Stop monitoring the region
if(self.viewController.currentBoundary != nil)
{
[self.viewController.locationManager stopMonitoringForRegion:self.viewController.currentBoundary];
self.viewController.currentBoundary = nil;
}
// Start full location services again
[self.viewController.locationManager startUpdatingLocation];
}