NSTimer でこれを作成する方法は知っていますが、数秒ごとにタイマーをオンにせずに現在の iPhone 座標を取得したくありません。アプリケーションがバックグラウンドにあるときに座標を取得しているため、タイマーを使用できません。
私は何かを試しましたが、これは10秒ごとではなく毎秒呼び出します。
ここで何が間違っていますか?
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *loc = [locations objectAtIndex:0];
NSDate* eventDate = loc.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (howRecent < 10)
{
CLLocation* location = [locations lastObject];
double lat = location.coordinate.latitude;
double lng = location.coordinate.longitude;
NSLog(@"lat:%f lng:%f", lat, lng);
最初に 10 秒ごとにバックグラウンド タスクを実行しようとしますが、ここで何かを行うと時間を設定する場所がわかりません。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^{
dispatch_async(dispatch_get_main_queue(), ^{
if (backgroundTask != UIBackgroundTaskInvalid)
{
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}
});
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
_pendingLocationsTimer = [NSTimer timerWithTimeInterval:_pendingLocationsTimerDuration
target:self
selector:@selector(_acceptBestAvailableLocation:)
userInfo:nil repeats:NO];
NSRunLoop *loop = [NSRunLoop currentRunLoop];
[loop addTimer:_pendingLocationsTimer forMode:NSRunLoopCommonModes];
[loop run];
dispatch_async(dispatch_get_main_queue(), ^{
if (backgroundTask != UIBackgroundTaskInvalid)
{
// if you don't call endBackgroundTask, the OS will exit your app.
[application endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;
}
});
});
}