Reputation: 5473
GPS signal is lost when App is resumed from long time suspend mode.
And/or after user goes into a building where GPS is weak and then resumes the App.
The blue dot disappears and the map is centered at lat:0 long:0 ( which is somewhere in the ocean near Nigeria-Africa ) If you launch another GPS app at that point in time, such as Apple Maps, you DO see the blue dot, even if not so accurate.
The only way a user can fix it - is by killing my app completely and start it again.
It happens on both iOS 5.x and iOS 6.x.
Before going into details, I would really like to ask:
Does anyone encounter this problem ??
Its very annoying but, I couldn't find anyone complaining about this
anywhere on the web - very weird.
I'm using normal CLLocation with showUserLocation=YES,
Nothing magical, no special accuracy tuning or whatever, just simple default
implementation.
I have already tried restarting every possible component when App is resumed;
showUserLocation=NO;
showUserLocation=YES;
or
[locationManager stopUpdatingLocation];
[locationManager startUpdatingLocation];
or
even releasing locationManager and initialize it again doesn't help!
( also tried restarting it with a delay using dispatch_after )
Is there any programmatic way to force RESET the GPS signal or CLLocation in ios ?
Will appreciate any relevant discussion!
Upvotes: 2
Views: 756
Reputation: 3211
When you say that you've tried stopping/starting the CLLocationManager
object, are you saying that the call-back you get in your delegate gives you a 0,0 coordinate, or are you trying to access the location directly using the location
property in CLLocationManager
?
I work on a location based app and one thing I can tell you is that you cannot count of directly getting the location of a CLLocationManager
object. The only reliable way to get location information is to rely on the callback of the CLLocationManager
class by implementing
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
The way I handle CLLocationManager
in my app (now I'm not saying this is optimal or ideal for your use case but it does allow us to provide a solid location-based experience to the user on app launch/resume)
CLLocationManager
into a location management class (usually using a singleton) - I think this can be a subclass of CLLocationManager
but in my case it's just a subclass of NSObject
with a CLLocationManager
object as a propertyNSUserDefaults
but we've done it in our app and doesn't seem to affect the approval process)CLLocationManager
is returning 0,0 and if it is, return your cached position insteadCLLocationManager
's delegate, you need to have a way to pass this information on to your view controllers).With the above, on my map page (or wherever I'm displaying user location) - I basically update the map with the cached location once (in viewDidLoad
) and then I allow one update to the map through the delegate-callback. Once that call-back is received, I then set showsUserLocation
to YES
(if the call-back isn't called, then you don't have a valid location yet and so setting showsUserLocation
at that point doesn't do anything).
I hope this helps and feel free to let me know if you have any further questions!
Upvotes: 0
Reputation: 47049
I Think you default Location is set "None" so this type of issue created.
Go to
Edite Scheme..
|
|
"Run YourProjectName" / Left Hand Side
|
|
Select "Option" Tab
|
|
Default Location
|
|
Choose any Location such like , "London England"
Upvotes: 1