내 프로젝트에서 나는 위치 evry 시간을 알아야합니다. 내 코드는 다음과 같습니다.ios, 매시간 위치 찾기 (ios7)
#import "AppDelegate.h"
@implementation AppDelegate {
UIBackgroundTaskIdentifier bgTask;
CLLocationManager *locationManager;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.pausesLocationUpdatesAutomatically = NO;
locationManager.activityType = CLActivityTypeOther;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
locationManager.distanceFilter = kCLDistanceFilterNone;
return YES;
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[locationManager startUpdatingLocation];
while(TRUE)
{
NSLog(@"Background time Remaining: %f",[[UIApplication sharedApplication] backgroundTimeRemaining]);
[NSThread sleepForTimeInterval:200]; //wait for x sec
[locationManager startUpdatingLocation];
}
[application endBackgroundTask: background_task];
background_task = UIBackgroundTaskInvalid;
});
}
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *location = [locations lastObject];
NSDate* eventDate = location.timestamp;
NSTimeInterval time = [eventDate timeIntervalSinceNow];
if (abs(time) < 15.0) {
if (location != nil) {
NSString *lat = [NSString stringWithFormat:@"%.8f", location.coordinate.latitude];
NSString *lng = [NSString stringWithFormat:@"%.8f", location.coordinate.longitude];
NSLog(@"location update ...");
//[APIConnection SaveMyPositionWitLat:lat withLng:lng];
//[locationManager stopUpdatingLocation];
}
}
}
이 작동하지만 배터리가 너무 빠르며 휴대 전화가 매우 빨리 소모되고 위치가 매 초마다 점검됩니다. 활성화하면 :
[locationManager stopUpdatingLocation];
다음 위치 서비스가 영구 중지됩니다. 배터리 전원을 절약하기 위해이 코드를 변경하는 방법은 무엇입니까?
이제 sleepForTimeInterval은 200 초이지만 3600 초로 변경해야합니다. – Nizzre
안녕하세요,이 답변을 확인하십시오. 도움이 될 것입니다. –