Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Determinar la velocidad de un vehículo usando GPS en android

Me gustaría saber cómo obtener la velocidad de un vehículo usando su teléfono mientras está sentado en el vehículo usando gps. He leído que el acelerómetro no es muy preciso. Otra cosa es; GPS será accesible mientras está sentado en un vehículo. ¿No tendrá el mismo efecto que mientras usted está en un edificio?

Aquí está un cierto código que he intentado pero he utilizado el PROVEEDOR de la RED instead.I apreciará la ayuda. Gracias…

  • ¿Cómo puedo eliminar un elemento específico de un JSONArray?
  • Android Studio 1.0 es demasiado lento
  • ¿Cómo puedo hacer coincidir una revisión de Servicios de Google Play con una versión de instalación?
  • Portar clases y métodos Java a Android. (TextLayout, Font, Graphics2D, y más)
  • ¿Cómo puedo saber si mi WebView está cargado al 100%?
  • Android - java.lang.IndexOutOfBoundsException: Posición de artículo no válida 0 (0). Número de artículos: 0
  • package com.example.speedtest; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends Activity { LocationManager locManager; LocationListener li; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); locManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); li=new speed(); locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, li); } class speed implements LocationListener{ @Override public void onLocationChanged(Location loc) { Float thespeed=loc.getSpeed(); Toast.makeText(MainActivity.this,String.valueOf(thespeed), Toast.LENGTH_LONG).show(); } @Override public void onProviderDisabled(String arg0) {} @Override public void onProviderEnabled(String arg0) {} @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) {} } } 

  • Match_parent propiedad para los niños en un RelativeLayout
  • Error StrictMode $ AndroidBlockGuardPolicy.onNetwork
  • Desactivar el gesto de desplazamiento que abre el cajón de navegación en android
  • Cómo hacer Drag & Drop Button en Android
  • ¿Cómo puedo eliminar archivos mediante programación en Android?
  • Desplazamiento automático de TextView en android para introducir texto en la vista
  • 4 Solutions collect form web for “Determinar la velocidad de un vehículo usando GPS en android”

    GPS funciona bien en un vehículo. La configuración NETWORK_PROVIDER puede no ser lo suficientemente precisa para obtener una velocidad confiable, y las ubicaciones desde NETWORK_PROVIDER pueden incluso no contener una velocidad. Puede comprobar que con location.hasSpeed() ( location.getSpeed() siempre devolverá 0).

    Si encuentra que location.getSpeed() no es lo suficientemente preciso, o es inestable (es decir, fluctúa drásticamente), entonces puede calcular la velocidad tomando la distancia media entre unas pocas ubicaciones GPS y dividir por el tiempo transcurrido.

    Para obtener más información sobreCalculate Speed ​​from GPS Location Change en Android Mobile device ver este enlace

    Sobre todo hay dos maneras de calcular la velocidad del teléfono móvil.

    1. Calcular velocidad desde Acelerómetro
    2. Calcular la velocidad de la tecnología GPS

    A diferencia del acelerómetro de la tecnología GPS, si va a calcular la velocidad, debe habilitar la conexión de datos y la conexión GPS.

    Aquí vamos a calcular la velocidad usando la conexión GPS. En este método usamos la frecuencia con la que los puntos de ubicación GPS están cambiando durante un solo período de tiempo. Entonces, si tenemos la distancia real entre los puntos geo ubicaciones podemos obtener la velocidad. Porque tenemos la distancia y el tiempo. Velocidad = distancia / tiempo Pero conseguir la distancia entre dos puntos de ubicación no es muy fácil. Debido a que el mundo es un objetivo en forma, la distancia entre dos puntos geográficos es diferente de un lugar a otro y de un ángulo a otro. Así que tenemos que usar "Haversine Algorithm"

    Introduzca aquí la descripción de la imagen

    Primero tenemos que dar permiso para obtener datos de ubicación en el archivo de manifiesto

    Hacer la GUI Introduzca aquí la descripción de la imagen

    Introduzca aquí la descripción de la imagen

    Introduzca aquí la descripción de la imagen

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/txtCurrentSpeed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="000.0 miles/hour" android:textAppearance="?android:attr/textAppearanceLarge" /> <CheckBox android:id="@+id/chkMetricUnits" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Use metric units?"/> 

    Entonces haga una interfaz para obtener la velocidad

     package com.isuru.speedometer; import android.location.GpsStatus; import android.location.Location; import android.location.LocationListener; import android.os.Bundle; public interface IBaseGpsListener extends LocationListener, GpsStatus.Listener { public void onLocationChanged(Location location); public void onProviderDisabled(String provider); public void onProviderEnabled(String provider); public void onStatusChanged(String provider, int status, Bundle extras); public void onGpsStatusChanged(int event); } 

    Implementar la lógica para obtener la velocidad utilizando la ubicación GPS

     import android.location.Location; public class CLocation extends Location { private boolean bUseMetricUnits = false; public CLocation(Location location) { this(location, true); } public CLocation(Location location, boolean bUseMetricUnits) { // TODO Auto-generated constructor stub super(location); this.bUseMetricUnits = bUseMetricUnits; } public boolean getUseMetricUnits() { return this.bUseMetricUnits; } public void setUseMetricunits(boolean bUseMetricUntis) { this.bUseMetricUnits = bUseMetricUntis; } @Override public float distanceTo(Location dest) { // TODO Auto-generated method stub float nDistance = super.distanceTo(dest); if(!this.getUseMetricUnits()) { //Convert meters to feet nDistance = nDistance * 3.28083989501312f; } return nDistance; } @Override public float getAccuracy() { // TODO Auto-generated method stub float nAccuracy = super.getAccuracy(); if(!this.getUseMetricUnits()) { //Convert meters to feet nAccuracy = nAccuracy * 3.28083989501312f; } return nAccuracy; } @Override public double getAltitude() { // TODO Auto-generated method stub double nAltitude = super.getAltitude(); if(!this.getUseMetricUnits()) { //Convert meters to feet nAltitude = nAltitude * 3.28083989501312d; } return nAltitude; } @Override public float getSpeed() { // TODO Auto-generated method stub float nSpeed = super.getSpeed() * 3.6f; if(!this.getUseMetricUnits()) { //Convert meters/second to miles/hour nSpeed = nSpeed * 2.2369362920544f/3.6f; } return nSpeed; } } 

    Combinar lógica con GUI

     import java.util.Formatter; import java.util.Locale; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.view.Menu; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; public class MainActivity extends Activity implements IBaseGpsListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); this.updateSpeed(null); CheckBox chkUseMetricUntis = (CheckBox) this.findViewById(R.id.chkMetricUnits); chkUseMetricUntis.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub MainActivity.this.updateSpeed(null); } }); } public void finish() { super.finish(); System.exit(0); } private void updateSpeed(CLocation location) { // TODO Auto-generated method stub float nCurrentSpeed = 0; if(location != null) { location.setUseMetricunits(this.useMetricUnits()); nCurrentSpeed = location.getSpeed(); } Formatter fmt = new Formatter(new StringBuilder()); fmt.format(Locale.US, "%5.1f", nCurrentSpeed); String strCurrentSpeed = fmt.toString(); strCurrentSpeed = strCurrentSpeed.replace(' ', '0'); String strUnits = "miles/hour"; if(this.useMetricUnits()) { strUnits = "meters/second"; } TextView txtCurrentSpeed = (TextView) this.findViewById(R.id.txtCurrentSpeed); txtCurrentSpeed.setText(strCurrentSpeed + " " + strUnits); } private boolean useMetricUnits() { // TODO Auto-generated method stub CheckBox chkUseMetricUnits = (CheckBox) this.findViewById(R.id.chkMetricUnits); return chkUseMetricUnits.isChecked(); } @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub if(location != null) { CLocation myLocation = new CLocation(location, this.useMetricUnits()); this.updateSpeed(myLocation); } } @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 onGpsStatusChanged(int event) { // TODO Auto-generated method stub } } 

    Si desea convertir Metros / Segundo a kmph-1, deberá multiplicar la respuesta Metros / Segundo de 3.6

    Velocidad de kmph-1 = 3.6 * (Velocidad de ms-1)

     public class MainActivity extends Activity implements LocationListener { 

    Agrega implementa LocationListener junto a Actividad

     LocationManager lm =(LocationManager) this.getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); this.onLocationChanged(null); 

    LocationManager.GPS_PROVIDER, 0, 0, El primer cero representa minTime y el segundo de minDistance en el que actualiza sus valores. Cero significa básicamente actualizaciones instantáneas que pueden ser malas para la vida de la batería, por lo que es posible que desee ajustarlo.

      @Override public void onLocationChanged(Location location) { if (location==null){ // if you can't get speed because reasons :) yourTextView.setText("00 km/h"); } else{ //int speed=(int) ((location.getSpeed()) is the standard which returns meters per second. In this example i converted it to kilometers per hour int speed=(int) ((location.getSpeed()*3600)/1000); yourTextView.setText(speed+" km/h"); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { } 

    No olvide los permisos

      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    Podemos usar location.getSpeed ​​();

      try { // Get the location manager double lat; double lon; double speed = 0; LocationManager locationManager = (LocationManager) getActivity().getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, false); if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } Location location = locationManager.getLastKnownLocation(bestProvider); try { lat = location.getLatitude(); lon = location.getLongitude(); speed =location.getSpeed(); } catch (NullPointerException e) { lat = -1.0; lon = -1.0; } mTxt_lat.setText("" + lat); mTxt_speed.setText("" + speed); }catch (Exception ex){ ex.printStackTrace(); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.