2016-05-12 4 views
3

Ich habe so viele Links durchsucht, auch nachdem ich keine passende Lösung für den Längen- und Breitengrad gefunden habe.Latitude und Longitude an den Server senden, wenn die App im Hintergrund ist

Periodic iOS background location updates

iOS long-running background timer with "location" background mode

versuchte ich von einigen Links und Foren, aber es ist nur 3 Minuten zu arbeiten, dann ist app nicht alle Benutzer-Standort zu aktualisieren.

- (void)applicationDidEnterBackground:(UIApplication *)application { 
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 


//create new uiBackgroundTask 
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    [app endBackgroundTask:bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
}]; 

//and create new timer with async call: 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 

    [locationManager startUpdatingLocation]; 

    NSTimer* t = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(startTrackingBg) userInfo:nil repeats:YES]; 
    [[NSRunLoop currentRunLoop] addTimer:t forMode:NSDefaultRunLoopMode]; 
    [[NSRunLoop currentRunLoop] run]; 
}); 

} 
-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
// store data 
CLLocation *newLocation = [locations lastObject]; 


//tell the centralManager that you want to deferred this updatedLocation 
if (_isBackgroundMode && !_deferringUpdates) 
{ 
    _deferringUpdates = YES; 
    [locationManager allowDeferredLocationUpdatesUntilTraveled:CLLocationDistanceMax timeout:10]; 
} 
} 

Antwort

9

Ok.

Nach dem Kämpfen für 3 Tage, es funktioniert für mich senden Breite und Länge, wenn App im Hintergrund ist auch nach 3 Minuten.

Ich überprüfte meine App, kontinuierlich senden lat lange für mehr als eine Stunde im Hintergrund.

Es kann jemand mindestens helfen.

Zuerst Bitte fügen Sie unten zwei Schlüssel in Ihrer PListe hinzu.

1.NSLocationAlwaysUsageDescription 
2.NSLocationWhenInUseUsageDescription 

Bothe sind Strings und Sie können jeden Wert geben.

Aktivieren Sie dann den Hintergrundabruf und überprüfen Sie die Standortaktualisierungen unter den Funktionen im Projektabschnitt.

Dann Corelocation-Framework importieren und diesen Code hinzufügen.

locationManager ist eine globale Variable.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
// Override point for customization after application launch. 
//create CLLocationManager variable 
locationManager = [[CLLocationManager alloc] init]; 
//set delegate 
locationManager.delegate = self; 

app = [UIApplication sharedApplication]; 
// 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. 

if ([locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) { 
    [locationManager setAllowsBackgroundLocationUpdates:YES]; 
} 
locationManager.desiredAccuracy = 45; 
locationManager.distanceFilter = 100; 
// Once configured, the location manager must be "started". 
[locationManager startUpdatingLocation]; 
} 

- (void)applicationWillResignActive:(UIApplication *)application { 
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 

[locationManager stopUpdatingLocation]; 
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
[locationManager setDistanceFilter:kCLDistanceFilterNone]; 
locationManager.pausesLocationUpdatesAutomatically = NO; 
locationManager.activityType = CLActivityTypeAutomotiveNavigation; 
[locationManager startUpdatingLocation]; 
} 

- (void)applicationDidEnterBackground:(UIApplication *)application { 
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 


[locationManager stopUpdatingLocation]; 

__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    bgTask = UIBackgroundTaskInvalid; 
}]; 

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 
               target:self 
              selector:@selector(startTrackingBg) 
              userInfo:nil 
              repeats:YES]; 


} 

-(void)startTrackingBg { 

[locationManager startUpdatingLocation]; 
NSLog(@"App is running in background"); 
} 
//starts automatically with locationManager 
    -(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 
latitude=newLocation.coordinate.latitude; 
longitude=newLocation.coordinate.longitude; 
NSLog(@"Location: %f, %f",newLocation.coordinate.longitude, newLocation.coordinate.latitude); 
} 
+0

@Santo ... überprüfen Sie bitte diese bro..and versucht, mir zu helfen .. http://stackoverflow.com/questions/37338466/sending-current-location-to-server-in-background- as-well-in-running-app-using –

+0

@SurajSukale zuerst lassen Sie mich wissen, bekommen Sie den aktuellen Standort, wenn Sie bauen? – Santo

+0

nein bro ... Eigentlich bin ich sehr neu in dieser App-Entwicklung (1. Mal an diesem speziellen Domain-Standort arbeiten) .... können Sie mir helfen, dies zu lösen –

Verwandte Themen