Lieu de départ Gestionnaire iOS 7 de tâche en tâche de fond
Il semble que dans iOS 7, une application ne peut pas démarrer Emplacement Manager (en appelant startUpdatingLocation) de la tâche en arrière-plan plus.
Dans iOS 6, j'ai utilisé l'approche décrite ici: https://stackoverflow.com/a/6465280 à s'exécuter en arrière-plan de mise à jour de toutes les n minutes. L'idée était de s'exécuter en tâche de fond avec une minuterie et de l'Endroit de départ Gestionnaire lorsque la minuterie qui la déclenche. Après que l'option désactiver la Localisation de Gestionnaire et de commencer une autre tâche en arrière-plan.
Après mise à jour vers iOS 7 cette approche ne fonctionne plus. Après la position de départ d'un Manager d'une application ne reçoit pas toute locationManager:didUpdateLocations. Des idées?
- Mon iPhone batterie avec joie approuve d'Apple décision de ne pas laisser les apps de le faire 🙂
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé le problème/solution. Quand il est temps de démarrer le service de localisation et d'arrêter la tâche en arrière-plan, arrière-plan la tâche devrait être arrêté avec un retard (j'ai utilisé 1 seconde). Sinon, le service de localisation ne démarre pas. Aussi le Service de Localisation doit être laissé SUR place pour un couple de secondes (dans mon exemple, il est de 3 secondes).
Un autre avis important, max de fond de temps en iOS 7 est maintenant à 3 minutes au lieu de 10 minutes.
Mis à jour le 29 octobre '16
Il y a un cocoapod APScheduledLocationManager qui permet d'obtenir le fond de l'emplacement des mises à jour de tous les n secondes avec emplacement souhaité de précision.
Le référentiel contient également un exemple d'application écrite en Swift 3.
Mis à jour le 27 Mai '14
Objective-C exemple:
1)".plist" jeu de fichiers
UIBackgroundModes
à "emplacement".2) Créer une instance de
ScheduledLocationManager
n'importe où vous voulez.3) configurer
4) mettre en Œuvre délégué méthodes
Ici est la mise en œuvre de ScheduledLocationManager:
ScheduledLocationManager.h
ScheduledLocationManager.m
getUserLocationWithInterval
n'est jamais appelé? Merci de poster un travail exemple.-[__NSDictionaryI applicationDidBecomeActive:]: unrecognized selector sent to instance 0x14db5cf0
Veuillez donner une certaine direction, quant à elle 🙂-[NSConcreteNotification applicationDidBecomeActive:]: unrecognized selector sent to instance 0x165ba320
Quelque chose dans la résolution de cette erreur 🙂UIBackgroundModes
...? J'ai maintenant en cours 70x30 secondes (toujours compter (et je suis bien sûr ne va pas faire dans la production)) planification de l'emplacement des mises à jour sans le "renouvellement" de la tâche en arrière-plan.[[UIApplication sharedApplication]backgroundTimeRemaining]
est maintenant de retour à zéro, mais le processus de fond continue. Se pourrait-il que lebackgroundTimeRemaining
est ignoré lorsque vous avez ajouté leUIBackgroundModes
plist propriété?[[UIApplication sharedApplication] backgroundTimeRemaining]
qui, comme mentionné en haut de cette réponse, seulement un maximum de 3 minutes de iOS7.locationManager.allowsBackgroundLocationUpdates = YES;
à l'initialiseur et supprimer cette ligne[self performSelector:@selector(stopBackgroundTask) withObject:nil afterDelay:1];
detimerEvent
fonction. J'espère que ça aidera quelqu'un comme moi 😀J'ai essayé votre méthode mais il ne fonctionne pas de mon côté. Pouvez-vous me montrer ton code?
J'ai effectivement trouvé une solution pour résoudre le service de localisation problème dans iOS 7.
Dans iOS 7, vous ne pouvez pas démarrer le service de localisation en arrière-plan. Si vous voulez que le service de localisation pour continuer à fonctionner en arrière-plan, vous devez il démarre en premier plan et il continuera à s'exécuter en arrière-plan.
Si vous étiez comme moi, arrêtez le service de l'emplacement et de l'utilisation de la minuterie pour le relancer dans le fond, il ne fonctionnera PAS dans iOS 7.
Pour de plus amples informations, vous pouvez regarder les 8 premières minutes de la vidéo 307 de la WWDC 2013: https://developer.apple.com/wwdc/videos/
Mise à jour: Le service de localisation peut de travail en arrière-plan ainsi. Veuillez vérifier Arrière-plan de Services de Localisation ne fonctionne pas sous iOS 7 pour la mise à jour du post avec la solution complète posté sur Github et un billet de blog expliquant les détails.
Étapes pour arriver à cette mise en œuvre sont les suivantes:
Ajouter "Application enregistre pour l'emplacement des mises à jour" au point 0 de "contexte" modes d'info.plist de votre projet.
Écrire de code ci-dessous lors de l'application a fini de se lancer.
Écrire ci-dessous du code à partir de l'endroit où vous voulez commencer le suivi de
Collez code suivant à AppDelegate.m
Ajouter une classe par le nom de "LocationUtil" et collez code ci-dessous dans le fichier d'en-tête:
Et collez code ci-dessous dans LocationUtil.m