2014-02-24 3 views
1

내 프로젝트에서 나는 위치 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]; 

다음 위치 서비스가 영구 중지됩니다. 배터리 전원을 절약하기 위해이 코드를 변경하는 방법은 무엇입니까?

+0

이제 sleepForTimeInterval은 200 초이지만 3600 초로 변경해야합니다. – Nizzre

+0

안녕하세요,이 답변을 확인하십시오. 도움이 될 것입니다. –

답변

0

당신은이 앱이 백그라운드에서 실행 유지하는 활성 위치 모니터링을 필요로하기 때문에 위치가 정말 아이폰 OS에서 수없는 것에 대해

1

아이디어를 도움이 될 것입니다 YESlocationManager.pausesLocationUpdatesAutomatically을 설정할 수 있습니다.

이 경우 애플은 중요한 변경 사항 만 확인하는 방법이 있습니다. startMonitoringSignificantLocationChanges.

위치의 주요 변경 사항을 앱에 알려줍니다. 그런 다음 더 정확한 위치를 얻으려면 할 수있는 일은 보통 startUpdatingLocation입니다.

이렇게하면 배터리를 절약하고 필요한 경우에만 위치를 파악할 수 있습니다.

+0

배터리를 절약하면서 매 시간마다 위치를 파악할 수 없습니까? 그렇다면 startMonitoringSignificantLocationChanges를 기반으로 이전 솔루션으로 되돌아갑니다. – Nizzre

+0

* 배터리 절약 : – Nizzre

+0

iOS에서 예약 된 작업을 수행하는 것은 거의 불가능합니다. 매시간 백그라운드 작업을 수행 할 수 있는지 시스템에 물어볼 수 있습니다. 그런 다음 시스템에서 허용하는 경우 매시간 약 10 초마다 작업을 수행합니다. 내 솔루션은 배터리가 빨리 소모되지 않도록 작동하는지 확인합니다. – rckoenes