I am developing an application that will continuously send location updates from the background service. I tried the following code.
public class LocationService extends Service implements LocationListener,
GooglePlayServicesClient.ConnectionCallbacks,
GooglePlayServicesClient.OnConnectionFailedListener {
LocationRequest mLocationRequest;
LocationClient mLocationClient;
@Override
public void onCreate() {
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service created:", com.example.locationservice.Constants.LOG_FILE);
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(5*1000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationClient = new LocationClient(getApplicationContext(), this,this);
mLocationClient.connect();
}
@Override
public void onStart(Intent intent, int startId) {
int start = Service.START_STICKY;
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Started:", com.example.locationservice.Constants.LOG_FILE);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Connection to client failed", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();
}
@Override
public void onConnected(Bundle arg0) {
Log.i("info", "Location Client is Connected");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client Connectd:", com.example.locationservice.Constants.LOG_FILE);
if(Util.isLocationEnabled(getApplicationContext())){
if(Util.isInternetOn(getApplicationContext())){
mLocationClient.requestLocationUpdates(mLocationRequest, this);
}else{
Log.i("info", "Internet not available");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();
}
}else{
Log.i("info", "Location Acess disabled");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Acess disabled", com.example.locationservice.Constants.LOG_FILE);
this.stopSelf();
}
Log.i("info", "Service Connect status :: " + isServicesConnected());
}
@Override
public void onDisconnected() {
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Client DisConnectd:", com.example.locationservice.Constants.LOG_FILE);
Log.i("info", "Location Client is DisConnected");
}
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Location Changed:", com.example.locationservice.Constants.LOG_FILE);
Log.i("info", "Latitude :: " + latitude);
Log.i("info", "Longitude :: " + longitude);
if(Util.isInternetOn(getApplicationContext())){
sendLocation(location);
}else{
this.stopSelf();
Log.i("info", "Internet not available");
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Internet not available", com.example.locationservice.Constants.LOG_FILE);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
Log.i("info", "Service is destroyed");
mLocationClient.removeLocationUpdates(this);
appendLog(DateFormat.getDateTimeInstance().format(new Date()) + ": Service Destroyed:", com.example.locationservice.Constants.LOG_FILE);
super.onDestroy();
}
private boolean isServicesConnected() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(LocationService.this);
if (ConnectionResult.SUCCESS == resultCode) {
return true;
} else {
return false;
}
}
}
but onLocationChangedonly called when I open the built-in card application. Otherwise, it does not update the location data. I started this service due to activity using the alert service. alarmManagertriggers for every minute. can anyone tell me why onLocationChanged is not calling continuously.
Thanks in advance.
source
share