2015-09-01 16 views
9

Sto scavando in questo codice che utilizza un timer di base per verificare gli aggiornamenti di posizione. Ho quindi l'invio di lat/lng su un server.iOS 9 Posizione Aggiornamento Attività in background dopo 3 minuti

http://mobileoop.com/background-location-update-programming-for-ios-7 https://github.com/voyage11/Location

Si sta lavorando bene quando inserito e collegato tramite XCode, tuttavia quando si scollega e prendo il dispositivo mobile, il sistema operativo sembra uccidere sempre il thread in background esattamente dopo 3 minuti. Quindi, se imposto il timer per l'esecuzione ogni 30 secondi, riceverò ~ 6 aggiornamenti fino a portare l'app in primo piano.

Ho letto che il tempo massimo di esecuzione in background è di 3 minuti, ma come vedo questo codice sta ripristinando l'attività in background dopo 1 minuto, quindi non sono sicuro del motivo per cui sto vedendo questo.

Ci deve essere un modo per aggirare questo. Qualche cosa posso fare qui?

EDIT: questo mi ha aiutato: allowsBackgroundLocationUpdates in CLLocationManager in iOS9

+0

aherrick hai trovato una soluzione per questo? Ho provato il codice elencato nella tua modifica, l'impostazione allowBackgroundLocationUpdates = YES, ma sto ancora terminando dopo 3 minuti con il polling GPS in background. Sono state apportate modifiche aggiuntive per far funzionare il polling GPS in background? – haplo1384

+0

Ehi! sì in realtà. Così ho capito che non c'è bisogno di palo di sfondo. Ho semplicemente UIBackgroundModes impostato su Location. Funziona solo a quel punto – aherrick

risposta

6

SE:

if ([self.locationManager respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)]) { 
    [self.locationManager setAllowsBackgroundLocationUpdates:YES]; 
} 

Ciò è necessario per il monitoraggio della posizione in background.

2

Nel caso in cui nessun altro si imbatte in questa edizione, il codice alla repo github sopra elencati - https://github.com/voyage11/Location - è stato recentemente aggiornato con una correzione per iOS 9, che permetterà al GPS per eseguire il polling continuo in background senza che il thread venga terminato dopo 3 minuti.

0

Nel caso qualcuno si imbatte in problemi unreliablity durante l'esecuzione di questo altrimenti eccellente biblioteca, integrate in altri moduli Xcode in un'applicazione più sofisticato, potrebbero osservare la dichiarazione di inizializzazione per l'elenco di attività in background serie Id e pensare di cambiare _bgTaskIdList = [NSMutableArray array]; to _bgTaskIdList = [[NSMutableArray alloc]init]; in BackgroundTaskManager.m Fino a che ho fatto questo ho ottenuto un comportamento inaffidabile. A volte ha funzionato e a volte ho avuto una discarica di stack. Ho scoperto che ciò era dovuto al fatto che bgTaskList era stato sovrascritto con altri dati causando errori di accesso errati.