位置情報サービスを使用してアプリを作成しましたが、アプリは10秒ごとに位置情報を送信する必要があります。そして、それは非常にうまくいきました。
Appleのドキュメントに従って、「allowDeferredLocationUpdatesUntilTraveled:timeout」メソッドを使用するだけです。
私がしたことは:
必須:更新場所のバックグラウンドモードを登録します。
1.作成LocationManger
とstartUpdatingLocation
し、accuracy
そしてfilteredDistance
あなたが好きなよう:
-(void) initLocationManager
{
// Create the manager object
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
_locationManager.delegate = self;
// This is the most important property to set for the manager. It ultimately determines how the manager will
// attempt to acquire location and thus, the amount of power that will be consumed.
_locationManager.desiredAccuracy = 45;
_locationManager.distanceFilter = 100;
// Once configured, the location manager must be "started".
[_locationManager startUpdatingLocation];
}
2.allowDeferredLocationUpdatesUntilTraveled:timeout
バックグラウンドでメソッドを使用してアプリを永久に実行し続けるにはupdatingLocation
、次のように、アプリがバックグラウンドに移動したときに新しいパラメーターで再起動する必要があります。
- (void)applicationWillResignActive:(UIApplication *)application {
_isBackgroundMode = YES;
[_locationManager stopUpdatingLocation];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[_locationManager setDistanceFilter:kCLDistanceFilterNone];
_locationManager.pausesLocationUpdatesAutomatically = NO;
_locationManager.activityType = CLActivityTypeAutomotiveNavigation;
[_locationManager startUpdatingLocation];
}
3.アプリは、locationManager:didUpdateLocations:
コールバックを使用して通常どおりupdatedLocationsを取得します。
-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// store data
CLLocation *newLocation = [locations lastObject];
self.userLocation = newLocation;
//tell the centralManager that you want to deferred this updatedLocation
if (_isBackgroundMode && !_deferringUpdates)
{
_deferringUpdates = YES;
[self.locationManager allowDeferredLocationUpdatesUntilTraveled:CLLocationDistanceMax timeout:10];
}
}
4.しかしlocationManager:didFinishDeferredUpdatesWithError:
、目的のためにコールバックでデータを処理する必要があります
- (void) locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error {
_deferringUpdates = NO;
//do something
}
5. 注:LocationManager
アプリがバックグラウンドモードとフォアグラウンドモードを切り替えるたびに、パラメーターをリセットする必要があると思います。