Uso de una ubicación simulada en la aplicación de navegación

Estoy tratando de desarrollar una aplicación que simule una ruta a través de la aplicación de navegación de Google. He encontrado algunos ejemplos excelentes de cómo implementar un proveedor de ubicación falsa en algunos otros mensajes en este sitio web ( Android mock ubicación en el dispositivo? ).
Con una simple modificación en el código fuente http://www.cowlumbus.nl/forum/MockGpsProvider.zip , mi ubicación simulada aparece en la aplicación Google Maps. (El único cambio es el nombre del proveedor simulador para LocationManager.GPS_PROVIDER).
Mi problema es que cuando abro la aplicación de navegación, dice "Buscando la señal GPS". Todavía veo mi localización que se mueve a través del mapa; Sin embargo, no genera una ruta hacia el destino. Me preguntaba si alguien sabe lo que tengo que hacer para navegar falsa para ver mi localización simulada como la señal GPS.
Gracias.

public class MockGpsProviderActivity extends Activity implements LocationListener { private MockGpsProvider mMockGpsProviderTask = null; private Integer mMockGpsProviderIndex = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); String mocLocationProvider = LocationManager.GPS_PROVIDER; locationManager.addTestProvider(mocLocationProvider, false, false, false, false, true, false, false, 0, 5); locationManager.setTestProviderEnabled(mocLocationProvider, true); locationManager.requestLocationUpdates(mocLocationProvider, 0, 0, this); try { List<String> data = new ArrayList<String>(); InputStream is = getAssets().open("test.csv"); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = reader.readLine()) != null) { data.add(line); } // convert to a simple array so we can pass it to the AsyncTask String[] coordinates = new String[data.size()]; data.toArray(coordinates); // create new AsyncTask and pass the list of GPS coordinates mMockGpsProviderTask = new MockGpsProvider(); mMockGpsProviderTask.execute(coordinates); } catch (Exception e) {} } @Override public void onDestroy() { super.onDestroy(); // stop the mock GPS provider by calling the 'cancel(true)' method try { mMockGpsProviderTask.cancel(true); mMockGpsProviderTask = null; } catch (Exception e) {} // remove it from the location manager try { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.removeTestProvider(MockGpsProvider.GPS_MOCK_PROVIDER); } catch (Exception e) {} } @Override public void onLocationChanged(Location location) { // show the received location in the view TextView view = (TextView) findViewById(R.id.text); view.setText( "index:" + mMockGpsProviderIndex + "\nlongitude:" + location.getLongitude() + "\nlatitude:" + location.getLatitude() + "\naltitude:" + location.getAltitude() ); } @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 } /** Define a mock GPS provider as an asynchronous task of this Activity. */ private class MockGpsProvider extends AsyncTask<String, Integer, Void> { public static final String LOG_TAG = "GpsMockProvider"; public static final String GPS_MOCK_PROVIDER = "GpsMockProvider"; /** Keeps track of the currently processed coordinate. */ public Integer index = 0; @Override protected Void doInBackground(String... data) { // process data for (String str : data) { // skip data if needed (see the Activity's savedInstanceState functionality) if(index < mMockGpsProviderIndex) { index++; continue; } // let UI Thread know which coordinate we are processing publishProgress(index); // retrieve data from the current line of text Double latitude = null; Double longitude = null; Double altitude= null; try { String[] parts = str.split(","); latitude = Double.valueOf(parts[0]); longitude = Double.valueOf(parts[1]); altitude = Double.valueOf(parts[2]); } catch(NullPointerException e) { break; } // no data available catch(Exception e) { continue; } // empty or invalid line // translate to actual GPS location Location location = new Location(LocationManager.GPS_PROVIDER); location.setLatitude(latitude); location.setLongitude(longitude); location.setAltitude(altitude); location.setTime(System.currentTimeMillis()); // show debug message in log Log.d(LOG_TAG, location.toString()); // provide the new location LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, location); // sleep for a while before providing next location try { Thread.sleep(200); // gracefully handle Thread interruption (important!) if(Thread.currentThread().isInterrupted()) throw new InterruptedException(""); } catch (InterruptedException e) { break; } // keep track of processed locations index++; } return null; } @Override protected void onProgressUpdate(Integer... values) { Log.d(LOG_TAG, "onProgressUpdate():"+values[0]); mMockGpsProviderIndex = values[0]; } } } 

Esto es lo que me faltaba:

 location.setLatitude(latitude); location.setLongitude(longitude); location.setAccuracy(16F); location.setAltitude(0D); location.setTime(System.currentTimeMillis()); location.setBearing(0F); 

También, es importante calcaulte el cojinete para la navegación. De lo contrario, las actualizaciones de ruta serán inexactas.

  • Uso del sensor de orientación para apuntar hacia una ubicación específica
  • Android: Location.distancePara no funcionar correctamente?
  • Conmutación entre proveedor de red y GPS
  • Rotar un ImageView para hacer frente a una posición dada en latitud y longitud
  • Android GPS tarda un tiempo en ser preciso
  • Geofences no funciona cuando se mata la aplicación
  • GetTriggeringGeofences y getGeofenceTransition de LocationServices
  • La actualización de la ubicación del fondo Android no aparece cuando la pantalla está desactivada
  • ¿Cómo puede obtener una ubicación en android cuando todos los proveedores de ubicación están inhabilitados?
  • RequestLocationUpdates no se actualiza en intervalos en Android
  • ¿Puede Flurry Analytics informar la ubicación del usuario por ciudad en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.