I'm trying to make an Android service, which should be started on device boot. It should send position data to a mySQL database every 5 minutes, through a POST to a php web service.
it is supposed to send the following data:
regID = same regId it used to register to GCM
name = a user name
latitude = the current latitude
longitude = the current longitude
I've never done a service before, so I'm quite confused on the right way to do it.
I would appreciate if you could guide me towards the right direction.
this is what I've done so far:
package servicio;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Service;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import com.google.android.gcm.GCMRegistrar;
public class GeoService extends Service {
LocationManager manejador;
String proveedor;
Location localizacion;
LocationListener locListener;
String latitud, longitud;
final String regId = GCMRegistrar
.getRegistrationId(getApplicationContext());
// double latitud, longitud;
@Override
public void onCreate() {
manejador = (LocationManager) getSystemService(LOCATION_SERVICE);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Criteria req = new Criteria();
req.setAccuracy(Criteria.ACCURACY_FINE);
// Lista de proveedores por criterio
proveedor = manejador.getBestProvider(req, false);
localizacion = manejador.getLastKnownLocation(proveedor);
// location listener
locListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
latitud = String.valueOf(location.getLatitude());
longitud = String.valueOf(location.getLongitude());
Thread sendGpsPositionToDB = new Thread(new Runnable() {
@Override
public void run() {
String server = "http://www.grupobcn.es/aquacleanmessenger/";
String serverUrl = server + "addposicion.php";
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("iddevice", regId));
params.add(new BasicNameValuePair("latitud", latitud));
params.add(new BasicNameValuePair("longitud", longitud));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(serverUrl);
try {
httppost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = httpclient
.execute(httppost);
} catch (IOException e) {
}
}
});
sendGpsPositionToDB.start();
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
};
manejador.requestLocationUpdates(LocationManager.GPS_PROVIDER, 300000,
0, locListener);
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intencion) {
return null;
}
}