Objective-C iPhone check location periodically
My iOS application relies heavily on GPS and I tried writing a method that
helps conserve battery but I am having little success.
I created an NSTimer that fired every 15 seconds. Every time the method
was called, it would increment an int time up by 1. If int time reached
20(5 minutes) it would turn off the location updates and set a bool
isStopped to true. Every time the method ran and int time was above 20, it
would increment another int, int time2, up by 1. If the method was ran and
int time2 was equal to 4, it would start the location updates again and
set time2 to 0.
Then in the didUpdateLocation: method for the location manager, I have an
algorithm that would first check if the bool isStopped was true, if it was
true then it would check the new location's horizontal accuracy and make
sure it was under 10. Then it would check the newLocation with a location
object named coords and check to see if they were greater than 9 meters
apart. If they were not, it would stop location updates again and return.
If they were, it would continue to another algorithm where it would check
the new location object against some arguments. If it passed the coords
location object would be set with the new location object, the time and
time2 ints would be set to 0, the isStopped would be set to false, and the
whole process would start all over again.
In short, after 5 minutes of no location changes, the location updates
would be stopped and periodically checked every 1 minute to see if the
user had moved at least 10 meters from the previous location that passed
all requirements. When the user does move far enough, it starts the
process all over again and the user has to not move 10 or more meters for
5 minutes before it starts the periodic checks. The thought behind this is
to do only few second checks every minute when the user isn't moving much
instead of constantly having the location services running.
Now here's the problem I run into, when the location updates stop. The
NSTimer stops running while the app is in the background.
Could I somehow schedule a background task to run the loop between the 1
minute checks? Does anyone have any better ideas? Or any ideas on
solutions to this?
No comments:
Post a Comment