pourquoi l'auto.locationManager stopUpdatingLocation n'a pas d'emplacement de l'arrêt de mise à jour
Problème: Il semble que je ne peux pas arrêter de Core Location
à partir de l'envoi de mises à jour de mon application et de suivi.
Ce que je fais: Dans mon viewWillAppear
j'appelle self.locationManager
et de passer à une méthode pour montrer la position de l'utilisateur sur la carte (une instance de MKMapView
). Le getter est substituée pour vérifier la disponibilité de la serive, pour voir si ses autorisé. Si oui, il allocs/inits
et startMonitoringSignificantLocationChanges
et returns
.
Dans viewDidDisappear
, j'appelle [self.locationManager stopUpdatingLocation]
. Mais je peux encore voir l'emplacement de l'icône dans la barre d'état. Même quand j'ai quitter l'application en double-cliquant sur le bouton d'accueil et de clôture, l'icône est toujours là... même après une longue période de temps (+de 10 minutes). Lorsque je vais dans les Paramètres de l'Application, il me dit que mon application est encore en utilisant les services de localisation (icône violette).
Question: Ce qui me manque ici? Pourquoi emplacement de mise à jour ne s'arrête pas?
Merci d'avance.
- Si vous avez deux questions (même si elles sont liées) vous devez vous poser deux questions distinctes.
- Passons sur la deuxième partie de la question. Je l'ai pris. J'ai trouvé la réponse. Merci.
- Swift version
Vous devez vous connecter pour publier un commentaire.
À l'opposé de
startMonitoringSignificantLocationChanges
n'est passtopUpdatingLocation
, il eststopMonitoringSignificantLocationChanges
.Vous voulez probablement pour remplacer
startMonitoringSignificantLocationChanges
avecstartUpdatingLocation
pour le plaisir de plus de mises à jour régulières, sauf si vous avez une raison particulière pour le suivi que pour d'importantes modifications de l'emplacement.Découvrez la CLLocation documentation pour plus de détails.
startUpdatingLocation
pour votre scénario, appelantstopUpdatingLocation
dans votreCLLocationManagerDelegate
une fois que vous avez un emplacement avec une précision suffisante pour vos besoins.[self.locationManager stopUpdatingHeading];
self.locationManager = nil;
a fonctionné pour moiTrop juste, j'ai eu le même problème que Canopus. Il apparaît que, même si stopUpdatingLocation est appelé la navigation pointeur se trouve encore sur la barre d'état si j'ai showUserLocation activé. C'est peut-être un bug? Il peut être comme je suis en cours d'exécution et d'essais avec iOS 4.2.1 et ce problème peut avoir été corrigé dans une version ultérieure du SDK.
Je pense que si stopUserLocation est appelé il serait également arrêter montrant la localisation de l'utilisateur depuis le point de vue, je suis en utilisant il en a déjà disparu et est ensuite libéré.
Il semble que vous devez définir showUserLocation PAS avant de s'arrêter de localisation de l'utilisateur des mises à jour.
De toute façon, dans ma méthode viewDidLoad j'ai le code suivant:
Plus de code...
J'ai résolu ce paramètre nul à locationManager propriété après délégué
Mes demandes app "toujours" auth. Seulement une certaine fonction au sein de l'app exige que. Si l'utilisateur active cette option, puis sur l'app proche, nous pouvons emplacement de l'arrêt des mises à jour (avec l'objectif d'économiser la batterie et la suppression de l'emplacement de l'icône de la barre d'état). Moi aussi, je pensais que l'arrêt n'a pas de travail parce que, après application à proximité de l'emplacement de l'icône dans la barre d'état était encore là, même si mon application est la seule application qui fonctionne sur mon téléphone avec accès à la localisation et "sur l'app fermer" j'ai juste dit que ça pour arrêter la mise à jour des emplacements.
Pour moi la solution a été d'être un peu plus patient et puis j'ai réalisé que il faut iOS environ 10-15 secondes pour éteindre l'emplacement du matériel et de la mise à jour de la barre d'état. Je n'ai pas eu à néant mon emplacement gestionnaire ou rien de spécial, juste arrêté les mises à jour sur l'app proche, attendu 15 secondes, et observé iOS supprimer l'emplacement de l'icône de la barre d'état. Espérons que cela aide quelqu'un là-bas!
Je travaillais avec
CLLocationManager
rapide et, je pense, est pertinent pour la Swift ou Objective-C, mais, je viens de créer un booléen qui-je mettre à jour à vrai chaque fois que j'ai reçu l'emplacement de mise à jour. Étant donné que dans mon cas, j'ai juste besoin qu'une fois de lancement.. Exemple,Aussi, dans mon cas, j'ai créé une fonction d'assistance que chaque fois que je reçois les données/l'emplacement de l'utilisateur, je viens d'appeler mon propre
stopUpdatingLocation
comme ça,Puis, si jamais vous utilisez l'emplacement des mises à jour que vous avez reçu, vous pouvez le faire...
J'espère que cela aide!
Swift:
Votre carte ET directeur des lieux à la fois besoin d'être arrêté:
Vous pouvez déboguer/vérifier la localisation de l'utilisation des services dans Xcode, dans le navigateur de débogage en vertu de l'Impact Énergétique.
.UIApplicationDidEnterBackground
) et le rallumer quand je reçois.UIApplicationDidBecomeActive
et la vue s'affiche (if self.isViewLoaded && (self.view.window != nil)
). Dans mon cas, l'affichage de la carte en utilisant le GPS est indépendante de lorsque l'application utilise la localisation manager pour d'autres fins à l'avant-plan et arrière-plan. Sur un appareil, l'emplacement de la "flèche" montre qu'il s'éteint au bout de 10 secondes environ.essayer cette..
Si vous utilisez le GoogleMaps SDK pour iOS, j'ai trouvé que si vous appelez
et ont encore
puis l'icône gps reste.
Ce que j'ai choisi de le faire est d'abord de montrer l'emplacement de l'utilisateur sur la carte, puis l'éteindre au bout de 8 secondes. Cela a fonctionné pour moi, en utilisant le GoogleMaps SDK. J'ai ajouté ceci dans le ViewDidLoad:
Vous pourriez mettre le même code dans viewWillDisappear si vous préférez ne pas le gps l'icône dans la barre d'état lorsque vous enchaîner à un autre point de vue.
Problème:
Dans mon cas, j'utilise à la fois startMonitoringSignificantLocationchanges et startUpdatingLocation.
Même après l'arrêt de l'emplacement par le biais de locationManager.stopMonitoringSignificantLocationchanges() &
locationManager.stopUpdatingLocation().
Ma position est appelé en permanence.
Solution:
1. Vérifiez si vous avez invalidé les minuteries.
2. Initialiser locationManager.délégué = nil.
Ces va certainement résoudre votre problème.