Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Google Play Services LocationClient in background service

My app is designed to track user's location periodically and send it to server, Recently I changed my code with Google play services Location API.

I created the locationclient and connected to the service in onStartCommand

public int onStartCommand(Intent intent, int flags, int startId) {     setUpLocationClientIfNeeded();     if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())     mLocationClient.connect();     return START_STICKY;  } 

and in onConnected method, I send a location request,

@Override public void onConnected(Bundle arg0) {     System.out.println("Connected ...");     mLocationClient.requestLocationUpdates(REQUEST, this);  } 

The REQUEST object is,

 private static final LocationRequest REQUEST = LocationRequest.create()       .setInterval(5*60*1000)      // 5 minutes       .setFastestInterval(3*60*1000) // 3 minutes       .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 

Now the issue is,

  1. the onLocationChanged method is not getting called at the given interval i.e 5 minutes or the fastest interval 3 minutes. From the log I could see, its getting called only twice or thrice after that its not getting called at all ( I checked after 1 hour).

What is the issue with my above code?. ( I couldnt see any log for 'disconnected' also)

  1. To solve this, I tried to use alarmmanager to call the task periodically. Now how to get a single location update through Locationclient from a broadcastreceiver. (locationclient.getLastlocation() only return last stored location but it is not requesting a new location)
like image 486
ThiyagaB Avatar asked Jun 03 '13 17:06

ThiyagaB


1 Answers

Full source code for a background service available here:

https://gist.github.com/blackcj/20efe2ac885c7297a676

Try adding the super call to your onStartCommand.

/**  * Keeps the service running even after the app is closed.  *   */ public int onStartCommand (Intent intent, int flags, int startId) {     super.onStartCommand(intent, flags, startId);      setUpLocationClientIfNeeded();     if(!mLocationClient.isConnected() || !mLocationClient.isConnecting())     {         mLocationClient.connect();     }      return START_STICKY; } 
like image 67
blackcj Avatar answered Oct 07 '22 20:10

blackcj