Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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)
question from:https://stackoverflow.com/questions/16902098/using-google-play-services-locationclient-in-background-service

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
250 views
Welcome To Ask or Share your Answers For Others

1 Answer

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...