Mon application fonctionne avec des mises à jour d'emplacement d'arrière-plan continues. Bien sûr, il a toutes les autorisations et d'autres choses commeDésactivation de allowBackgroundLocationUpdates (CLLocationManager) ne fonctionne pas après avoir été activé
allowsBackgroundLocationUpdates = true
Au départ, je voulais réagir à LowPowerMode
changements tout en arrière-plan en utilisant NSProcessInfoPowerStateDidChange
notification. Et pour désactiver allowsBackgroundLocationUpdates
pour arrêter la mise à jour des emplacements sans appeler stopUpdatingLocation
.
Cependant, j'ai découvert qu'après réception de la notification et la mise en
allowsBackgroundLocationUpdates = false
dans l'application de fond est en cours de travail.
Je suis donc allé plus loin et identifié, qui la désactivationallowsBackgroundLocationUpdates
même au premier plan après avoir été initialement fixé à true
ne fonctionne pas du tout. L'application continue de fonctionner en arrière-plan.
la documentation d'Apple sur la question
vous utilisez cette propriété pour activer et désactiver le comportement basé sur le comportement de votre application
de la classe CLLocationManager, description de allowsBackgroundLocationUpdates
propriété
Avec UIBackgroundModes défini pour inclure "location" dans Info.plist, vous doit également définir cette propriété à YES lors de l'exécution à chaque appel -startUpdatingLocation avec l'intention de continuer en arrière-plan. La réinitialisation de cette propriété à NO équivaut à omettre "location" de la valeur UIBackgroundModes.
Simple project sur GitHub qui montre le comportement que j'ai mentionné. Donc, la question, est-ce un comportement intentionnel de la propriété?
Je trouve cela aussi dans iOS 11. Curieusement, cela semble fonctionner dans le simulateur mais pas sur un périphérique réel. Je dois redémarrer mon application pour qu'elle prenne effet, donc "basculer" ne fonctionne pas. – njlaboratory