Run Gps as background service and send coordinates to web server (PHP)
Just create a service that runs in the background all the time.
For Example:-
AndroidLocationServices
public class AndroidLocationServices extends Service {WakeLock wakeLock;private LocationManager locationManager;public AndroidLocationServices() { // TODO Auto-generated constructor stub}@Overridepublic IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null;}@Overridepublic void onCreate() { // TODO Auto-generated method stub super.onCreate(); PowerManager pm = (PowerManager) getSystemService(this.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DoNotSleep"); // Toast.makeText(getApplicationContext(), "Service Created", // Toast.LENGTH_SHORT).show(); Log.e("Google", "Service Created");}@Override@Deprecatedpublic void onStart(Intent intent, int startId) { // TODO Auto-generated method stub super.onStart(intent, startId); Log.e("Google", "Service Started"); locationManager = (LocationManager) getApplicationContext() .getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, listener);}private LocationListener listener = new LocationListener() { @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub Log.e("Google", "Location Changed"); if (location == null) return; if (isConnectingToInternet(getApplicationContext())) { JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); try { Log.e("latitude", location.getLatitude() + ""); Log.e("longitude", location.getLongitude() + ""); jsonObject.put("latitude", location.getLatitude()); jsonObject.put("longitude", location.getLongitude()); jsonArray.put(jsonObject); Log.e("request", jsonArray.toString()); new LocationWebService().execute(new String[] { Constants.TRACK_URL, jsonArray.toString() }); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @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 }};@Overridepublic void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); wakeLock.release();}public static boolean isConnectingToInternet(Context _context) { ConnectivityManager connectivity = (ConnectivityManager) _context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } return false;}}
LocationWebService
public class LocationWebService extends AsyncTask<String, String, Boolean> {public LocationWebService() { // TODO Auto-generated constructor stub}@Overrideprotected Boolean doInBackground(String... arg0) { ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("location", arg0[1])); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(arg0[0]); HttpParams httpParameters = new BasicHttpParams(); httpclient = new DefaultHttpClient(httpParameters); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response; response = httpclient.execute(httppost); StatusLine statusLine = response.getStatusLine(); if (statusLine.getStatusCode() == HttpStatus.SC_OK) { Log.e("Google", "Server Responded OK"); } else { response.getEntity().getContent().close(); throw new IOException(statusLine.getReasonPhrase()); } } catch (Exception e) { e.printStackTrace(); } return null;}}
You can find a sample project with Android App and corresponding WebFiles within this github project androidbackgroundgps