iphone: het gebruik van Background location services wordt na korte tijd gestopt

ik probeer een locatie te krijgen en deze te vergelijken met een online locatie, alles gebeurt op de achtergrond de methode die ik maak werkt prima met behulp van de achtergrondlocatieservice maar na een minuut verdwijnt het locatiepictogram in de statusbalk en wordt de methode niet langer aangeroepen

hier is de code

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {


    double  lat = newLocation.coordinate.latitude;
    double  lon = newLocation.coordinate.longitude;
    NSURL * locationURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://somedomainname.com/iphoneLocation?lat=%f&lon=%f",lat,lon]];
    NSData * responseData = [NSData dataWithContentsOfURL:locationURL];
    NSString* aStr;
    aStr = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding];



    if ([aStr isEqualToString:@"out Of Any Knowen Range"] ){
            UILocalNotification *notify =[[UILocalNotification alloc] init];
            notify.alertAction = [[NSString alloc] initWithString: @"View"];
            notify.fireDate=nil;
            notify.alertBody = [NSString stringWithFormat:@"New Data Occured"];
            notify.soundName = UILocalNotificationDefaultSoundName;
            NSLog(@"Local notification should display");
            [[UIApplication sharedApplication] presentLocalNotificationNow:notify];
        }

}

en in de view is het laden ik gebruik zoiets als dit

locationManager = [[CLLocationManager alloc] init];

    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    locationManager.delegate = self;

    [locationManager startUpdatingLocation];

    CLLocation *userLocation = [locationManager location];

dus wat is er verkeerd aan

2

2 antwoord

U moet uw AppName-Info.plist -bestand wijzigen door een sleutel Vereiste achtergrondmodi toe te voegen met een item met waarde App-registers voor locatie-updates . Een ander ding dat ik denk dat je zou moeten doen als je online verbinding maakt en dit gebeurt misschien niet erg snel, dus de operatie die je online verbindt, de locatie post en wacht op reactie zou moeten beginnen in een andere thread en ondertussen als je een andere locatie van CLLocationManager en uw vorige aanvraag is nog niet voltooid om het plaatsen van de nieuwe locatie over te slaan ...

1
toegevoegd
Probeer commentaar te geven op de lijnen waar u online verbinding maakt en te wachten op antwoord, als het niet stopt, dan is het probleem dat u online verbinding maakt, omdat dit vertraagt ​​hoe snel de didUpdateLocation -methode terugkeert ... en u zou moeten implementeer het zoals ik het beschreef in mijn antwoord ...
toegevoegd de auteur graver, de bron
bel je ergens stopUpdatingLocation ?
toegevoegd de auteur graver, de bron
Als u het AppName-Info.plist-bestand hebt gewijzigd, moet dit niet stoppen ... Wat doet u in de methode didFailWithError delegeren?
toegevoegd de auteur graver, de bron
ik gebruik app-registers voor de locatie zoals ik in de post heb gezegd .. en voor de trage verbinding is dat niet het geval. het probleem is dat het locatiepictogram in de statusbalk na een minuutje verdwijnt alsof het klaar is controleren of opgeschort !!
toegevoegd de auteur Mohamed Emad Hegab, de bron
bedankt..Ik heb geprobeerd je idee om de url te becommentariëren en hetzelfde gebeurt :)
toegevoegd de auteur Mohamed Emad Hegab, de bron
nee .. zou ik .. ik veronderstelde dat het gebeld wordt omdat het op de achtergrond staat !!
toegevoegd de auteur Mohamed Emad Hegab, de bron
didFailWithError wordt nooit gebeld
toegevoegd de auteur Mohamed Emad Hegab, de bron
zo is er een manier die we weten?
toegevoegd de auteur Mohamed Emad Hegab, de bron

Ik vraag me af of de locatiemanager ergens wordt vrijgegeven en daarom geen updates meer verzendt.

Heeft u geprobeerd de locatiemanager in te stellen op een bewaarde eigenschap in uw view-controller?

@property (nonatomic, strong) CLLocationManager *locationManager
0
toegevoegd
ik deed dat en nog steeds stopte het na 20 seconden
toegevoegd de auteur Mohamed Emad Hegab, de bron
Het vreemde is ... het werkt prima op de simulator .. maar alle apparaten hebben geen geluk
toegevoegd de auteur Mohamed Emad Hegab, de bron
Ik neem aan dat je hebt geprobeerd om alle netwerkcodes uit te spreken en alleen een loginstructie achter te laten in de callback van didUpdateTo? Is de app helemaal gecrasht? Als het niet crasht, betekent dit waarschijnlijk dat de view controller ergens wordt gelost en de locatiemanager wordt vrijgegeven.
toegevoegd de auteur John Grant, de bron