• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Tim Cooke
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • Junilu Lacar
  • Rob Spoor
  • Jeanne Boyarsky
Saloon Keepers:
  • Stephan van Hulst
  • Carey Brown
  • Tim Holloway
  • Piet Souris
Bartenders:

Controlling location update interval

 
Ranch Hand
Posts: 68
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I'm developing application that should update users current location on few minute interval.
Existing built-in timeInterval option on LocationManager.requestLocationUpdates method is not reliable.
I found few solutions that solve the problem by using timer and manual control of requestLocationUpdates interval.
Is there some other solution or using timer is the best option?
 
author
Posts: 18
Android Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Yes, the LocationManager takes time interval just as a hint. If you want more precise timing, I'd look into manually requesting updates when needed (plus that helps save battery). You can use AlarmService to set the intervals.
 
Aleksandar Babic
Ranch Hand
Posts: 68
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I never thought of using alarm service for that.
Thanks.
 
Aleksandar Babic
Ranch Hand
Posts: 68
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
@Marko Gargenta

Still haven't tried to do it with AlarmService, but I've found some snippet that is using Handler to initiate scheduled task.
I had problem to update map when using Timer because it's not allowing to access UI from non UI thread (ERROR: Can't create handler inside thread that has not called Looper.prepare()).
Now I've created something like this in onCreate

In location listener I call removeUpdates inside onLocationChanged to stop GPS updating after retrieving location.
Now it's requesting location every 20sec (and move the marker across the map)

Is this approach good, or it has some hidden issues?

ps. Your book will certainly come to rescue
 
Marko Gargenta
author
Posts: 18
Android Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You cannot update UI thread from a non-UI thread. That's why you are getting that problem. Take a look at AsyncTask - it was designed specifically to get around this problem. It simply synchronizes threads over UI components.

I used to use Handler to post delayed messages and have something repeat over and over again that way. It works, but it's not as elegant as AlarmService.

I addressed all these issues in the book. Hopefully it helps you.
Marko
 
Aleksandar Babic
Ranch Hand
Posts: 68
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thank you for a very useful answer.

I wish you all the best in your future work, and many great books.
//Aleksandar
 
Time flies like an arrow. Fruit flies like a banana. Steve flies like a tiny ad:
The Low Tech Laboratory Movie Kickstarter is LIVE NOW!
https://www.kickstarter.com/projects/paulwheaton/low-tech
reply
    Bookmark Topic Watch Topic
  • New Topic