velocidad recorridos recorrida para medir kilometros internet distancias distancia cuanto caminas caminar caminando bicicleta app aplicaciĆ³n aplicacion android gps latitude-longitude

android - recorridos - Usar gps para obtener la distancia que una persona ha caminado



app para medir distancia recorrida en bicicleta (3)

chicos, puedo obtener la longitud de ubicación actual y Latitude usando el siguiente código. Tengo dos botones Start walking and Stop Walking.

Al hacer clic en Start Walking obtendrá la ubicación actual (longitud y latitud) la persona comenzará a caminar desde la posición A (fuente) y caminará desde algún momento y regresará a A (ahora se convierte en destino), luego hará clic en detener caminando botón.

Ahora necesito mostrarle al usuario estos detalles:

1.Distancia de que él caminó en Kms.

2. Tiempo que tomó en minutos.

(opcional) 3.velocidad o velocidad promedio.

**

Código para obtener la ubicación actual

**

private EditText editTextShowLocation; private Button buttonGetLocation; private ProgressBar progress; private LocationManager locManager; private LocationListener locListener = new MyLocationListener(); private boolean gps_enabled = false; private boolean network_enabled = false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editTextShowLocation = (EditText) findViewById(R.id.editTextShowLocation); progress = (ProgressBar) findViewById(R.id.progressBar1); progress.setVisibility(View.GONE); buttonGetLocation = (Button) findViewById(R.id.buttonGetLocation); buttonGetLocation.setOnClickListener(this); locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); } @Override public void onClick(View v) { progress.setVisibility(View.VISIBLE); // exceptions will be thrown if provider is not permitted. try { gps_enabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER); } catch (Exception ex) { } try { network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); } catch (Exception ex) { } // don''t start listeners if no provider is enabled if (!gps_enabled && !network_enabled) { AlertDialog.Builder builder = new Builder(this); builder.setTitle("Attention!"); builder.setMessage("Sorry, location is not determined. Please enable location providers"); builder.setPositiveButton("OK", this); builder.setNeutralButton("Cancel", this); builder.create().show(); progress.setVisibility(View.GONE); } if (gps_enabled) { locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener); } if (network_enabled) { locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locListener); } } class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location location) { if (location != null) { // This needs to stop getting the location data and save the battery power. locManager.removeUpdates(locListener); String londitude = "Londitude: " + location.getLongitude(); String latitude = "Latitude: " + location.getLatitude(); String altitiude = "Altitiude: " + location.getAltitude(); String accuracy = "Accuracy: " + location.getAccuracy(); String time = "Time: " + location.getTime(); editTextShowLocation.setText(londitude + "/n" + latitude + "/n" + altitiude + "/n" + accuracy + "/n" + time); progress.setVisibility(View.GONE); } } @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 } } @Override public void onClick(DialogInterface dialog, int which) { if(which == DialogInterface.BUTTON_NEUTRAL){ editTextShowLocation.setText("Sorry, location is not determined. To fix this please enable location providers"); }else if (which == DialogInterface.BUTTON_POSITIVE) { startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }

Cómo lograr esto


Ante todo. Esto es más que una pregunta sobre un problema y luego recibirá una respuesta. Las personas en este foro no te harán trabajar para ti.

Ahora a una manera de lograr lo que quieres.

Debe usar un servicio para realizar un seguimiento del usuario y las ubicaciones. La manera más fácil sería incorporar el servicio mytracks que está disponible como complemento de su aplicación o usar código de mytracks para crear su propio servicio de seguimiento. http://code.google.com/p/mytracks/

Puede consultar: http://code.google.com/p/mytracks/w/list


prueba esto

public class TestActivity extends Activity implements Runnable { private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters private static final long MINIMUM_TIME_BETWEEN_UPDATES = 30000; protected LocationManager locationManager; static double n=0; Long s1,r1; double plat,plon,clat,clon,dis; MyCount counter; Thread t1; EditText e1; boolean bool=true; Button b1,b2,b3,b4,b5; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.button1);<--- current position b2=(Button)findViewById(R.id.button2);<---- start moving.. calculates distance on clicking this b3=(Button)findViewById(R.id.button3);<--- pause b4=(Button)findViewById(R.id.button4);<-- resume b5=(Button)findViewById(R.id.button5);<-- get distance e1=(EditText)findViewById(R.id.editText1); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener() ); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showCurrentLocation(); } }); } protected void showCurrentLocation() { Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { String message = String.format( "Current Location /n Longitude: %1$s /n Latitude: %2$s", location.getLongitude(), location.getLatitude() ); clat=location.getLatitude(); clon=location.getLongitude(); Toast.makeText(TestActivity.this, message, Toast.LENGTH_LONG).show(); } else{ Toast.makeText(TestActivity.this, "null location", Toast.LENGTH_LONG).show(); } } public void start (View v){ switch(v.getId()){ case R.id.button2: t1=new Thread(); t1.start(); counter= new MyCount(30000,1000); counter.start(); break; case R.id.button3: counter.cancel(); bool=false; break; case R.id.button4: counter= new MyCount(s1,1000); counter.start(); bool=true; break; case R.id.button5: double time=n*30+r1; Toast.makeText(TestActivity.this,"distance in metres:"+String.valueOf(dis)+"Velocity in m/sec :"+String.valueOf(dis/time)+"Time :"+String.valueOf(time),Toast.LENGTH_LONG).show(); } } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { String message = String.format( "New Location /n Longitude: %1$s /n Latitude: %2$s", location.getLongitude(), location.getLatitude() ); Toast.makeText(TestActivity.this, message, Toast.LENGTH_LONG).show(); } public void onStatusChanged(String s, int i, Bundle b) { Toast.makeText(TestActivity.this, "Provider status changed", Toast.LENGTH_LONG).show(); } public void onProviderDisabled(String s) { Toast.makeText(TestActivity.this, "Provider disabled by the user. GPS turned off", Toast.LENGTH_LONG).show(); } public void onProviderEnabled(String s) { Toast.makeText(TestActivity.this, "Provider enabled by the user. GPS turned on", Toast.LENGTH_LONG).show(); } } public class MyCount extends CountDownTimer{ public MyCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { counter= new MyCount(30000,1000); counter.start(); n=n+1; } @Override public void onTick(long millisUntilFinished) { s1=millisUntilFinished; r1=(30000-s1)/1000; e1.setText(String.valueOf(r1)); } } @Override public void run() { while(bool){ clat=location.getLatitude(); clon=location.getLongitude(); if(clat!=plat || clon!=plon){ dis+=getDistance(plat,plon,clat,clon); plat=clat; plon=clon; } } }

función para calcular la distancia ...

public double getDistance(double lat1, double lon1, double lat2, double lon2) { double latA = Math.toRadians(lat1); double lonA = Math.toRadians(lon1); double latB = Math.toRadians(lat2); double lonB = Math.toRadians(lon2); double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) + (Math.sin(latA) * Math.sin(latB)); double ang = Math.acos(cosAng); double dist = ang *6371; return dist; }

}


Puede calcular la distancia entre dos ubicaciones geográficas con la función distanceTo ()
Location destination =new Location("gps");
destination.setLatitude(lat);
destination.setLongitude(lng);
float dist=user_location.distanceTo(destination);