I am trying to listen to location changes but sometimes onLocationChanged callback is never called and getLastLocation returns null, w
You are using getLastLocation() for a purpose other than what it was intended. getLastLocation() is used when a location aware app is 1st starting. After two days you should have a very accurate fix. Why haven't you followed the location aware design guides.
I'd say you need to return START_STICKY. But you have coded onStartCommand() and onBind(). You'd also need to start the service then bind to it for the START_STICKY to work after clients have unbound.
Don't check for GooglePlay in the service. The service needs to be light weight check for GooglePlay in an activity before starting the service. The lighter a service is the more chance it will stay in memory. Run the Service in a separate process.