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]; } } }
- ¿Cuál es el significado de dbm negativo en la fuerza de la señal?
- Cómo obtener el usuario Inicio / Lugar de trabajo de un usuario en Android
- Diferencia entre LocationRequest setInterval (long millis) y LocationRequest setFastestInterval (long millis)
- ¿Cómo puedo obtener el nombre de la ciudad de mi posición actual?
- Obtener la ubicación de Android a través de wifi no funciona
- Proveedores de ubicación de Android - ¿Proveedor de GPS o de red?
- obtener la ubicación actual (gps / wifi)
- Cálculo de distancia desde mi ubicación hasta la ubicación de destino en android
- ¿Cómo obtener el País (o su código ISO)?
- CellID y LAC / PSC para celdas vecinas 3G en Android
- Android - Distancia entre dos ciudades
- Cómo actualizar dinámicamente un elemento de superposición específico
- Android locationManager sigue llamando onLocationChanged después de removeUpdates
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.
- Norma de arquitectura de Android MVP para cargar interfaz de usuario con clase Model que tiene recurso android
- Primero comete Android Studio Project – ¿Qué debería dejar de lado?