|
||
|
|
|
|||||||
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Obtener posicion cada minuto
private void posicion(){
mapView = (MapView)findViewById(R.id.mapa); mapView.setBuiltInZoomControls(true); mapView.setSatellite(true); mapView.setStreetView(true); mapView.setTraffic(true); mapController = mapView.getController(); lat = location.getLatitude()*1E6; lng = location.getLongitude()*1E6; coglat = location.getLatitude()*1E6; coglng = location.getLatitude()*1E6; List<Overlay> mapOverlays = mapView.getOverlays(); mlo = new MyLocationOverlay(this, mapView); Drawable drawable = this.getResources().getDrawable(R.drawable.map_pin _32); MyOverlay itemizedOverlay = new MyOverlay(drawable, this); point = new GeoPoint(lat.intValue(),lng.intValue()); //Toast.makeText(getApplicationContext(), "Tu Localizacion es : \nLat: " + lat + "\nLong: "+lng, Toast.LENGTH_LONG).show(); OverlayItem overlayitem = new OverlayItem(point, "Su posicion actual es : ", "Latitud: " + lat + "\nLongitud: " + lng); itemizedOverlay.addOverlay(overlayitem); mapOverlays.add(itemizedOverlay); mapController.setCenter(point); mapController.animateTo(point); mapController.setZoom(16); mlo.enableMyLocation(); mlo.enableCompass(); mapOverlays.add(mlo); mapView.postInvalidate(); } Tengo el sgte metodo que me da la posicion actual... pero lo que necesito es que cada minuto me de una nueva posicion junto con la antigua posicion dibujada en el mapa.. si alguien me pudiera ayudar.. es un poryecto y es algo urgente |
|
|
|
#2
|
||||
|
||||
|
Re: Obtener posicion cada minuto
Una forma de ejecutar ese código cada minuto es crear un timer que llame a esa función cada 60 segundos, muy sencillo.
Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { posicion(); } }, 0, 60000); Acuérdate de hacer timer.stop() cuando dejes de utilitzar el timer o continuará ejecutándose en segundo plano |
|
#3
|
||||
|
||||
|
Una forma de ejecutar ese código cada minuto es crear un timer que llame a esa función cada 60 segundos, muy sencillo.
Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { posicion(); } }, 0, 60000); Acuérdate de hacer timer.stop() cuando dejes de utilitzar el timer o continuará ejecutándose en segundo plano ![]() |
|
#4
|
||||
|
||||
|
Re: Obtener posicion cada minuto
Al mapa, si mal no recuerdo, le puedes pedir un objeto del tipo Location. Podrías tener en el activity 2 variables Location privadas, una para la posición actual y otro para la anterior. Antes de actualizar el valor del actual, guárdalo en la variable anterior.
Si vas a necesitar todos los puntos de la ruta, puedes ir añadiendolos en un ArrayList o, si son muchos, en una sqlite. Hay muchas opciones para hacer eso Solo es cuestión de ver cuál se amolda mejor a lo que necesitas
|
|
#5
|
||||
|
||||
|
Re: Obtener posicion cada minuto
Al mapa, si mal no recuerdo, le puedes pedir un objeto del tipo Location. Podrías tener en el activity 2 variables Location privadas, una para la posición actual y otro para la anterior. Antes de actualizar el valor del actual, guárdalo en la variable anterior.
Si vas a necesitar todos los puntos de la ruta, puedes ir añadiendolos en un ArrayList o, si son muchos, en una sqlite. Hay muchas opciones para hacer eso Solo es cuestión de ver cuál se amolda mejor a lo que necesitas![]() |
|
#6
|
||||
|
||||
|
Re: Obtener posicion cada minuto
Disculpa por la tardanza pero es que he estado fuera todo el fin de semana. Mañana por la mañana tendré el código a mano. Recorto el ejemplo que te haga falta y te lo paso por aquí (te adjuntaré las clases java también por si acaso)
|
|
#7
|
||||
|
||||
![]() ![]() me has salvado la vida...
|
|
#8
|
||||
|
||||
|
Vamos a ver, por partes =)
de la función esa tuya de posicion(), yo sacaría todo el tema este de la configuración del mapa (donde le dices que quieres los controles de zoom, que habilite la brújula, que habilite tu posición, etc) para ejecutarlo sólo una vez y dentro de la función de posición dejaría sólo el código que necesitas para recuperar los datos que quieres de posición ya que esa función la vas a ejecutar en un timer cada minuto y no es necesario que configure el mapa cada vez. Dentro de esa función, pondría una llamada también al método que te crees para insertar esa posición en una bbdd sqlite. Ese método es muy muy sencillo. Se te quedaría una cosa así: public void insertLocation(float lat, float long){ ContentValues iniValues = new ContentValues(); iniValues.put("latitud", lat); iniValues.put("longitud", long); mDB.insert("posiciones", null, iniValues); } donde mDB es una instancia de un SQLiteDatabase. Encontrarás facilmente googleando un poco un tuto sobre cómo crear tu clase db helper para usar sqlite. En esencia no es más que una clase en la que implementas la mini-base de datos definiendo sus tablas y los métodos que consideres necesarios para insertar o consultar los datos. Como te dije, voy a adjuntar un ejemplo de un db helper sencillito. Verás que en una de las funciones creo un objeto del tipo Punto. Tendrás que crearte la clase ya que ese objeto no existe =). Espero que te sirva! |
|
#9
|
||||
|
||||
|
Vamos a ver, por partes =)
de la función esa tuya de posicion(), yo sacaría todo el tema este de la configuración del mapa (donde le dices que quieres los controles de zoom, que habilite la brújula, que habilite tu posición, etc) para ejecutarlo sólo una vez y dentro de la función de posición dejaría sólo el código que necesitas para recuperar los datos que quieres de posición ya que esa función la vas a ejecutar en un timer cada minuto y no es necesario que configure el mapa cada vez. Dentro de esa función, pondría una llamada también al método que te crees para insertar esa posición en una bbdd sqlite. Ese método es muy muy sencillo. Se te quedaría una cosa así: public void insertLocation(float lat, float long){ ContentValues iniValues = new ContentValues(); iniValues.put("latitud", lat); iniValues.put("longitud", long); mDB.insert("posiciones", null, iniValues); } donde mDB es una instancia de un SQLiteDatabase. Encontrarás facilmente googleando un poco un tuto sobre cómo crear tu clase db helper para usar sqlite. En esencia no es más que una clase en la que implementas la mini-base de datos definiendo sus tablas y los métodos que consideres necesarios para insertar o consultar los datos. Como te dije, voy a adjuntar un ejemplo de un db helper sencillito. Verás que en una de las funciones creo un objeto del tipo Punto. Tendrás que crearte la clase ya que ese objeto no existe =). Espero que te sirva! ![]() |
|
#10
|
||||
|
||||
|
Yo veo mas fácil poner en la activity del mapa un locationlistener cada 60 segundos y en el onlocationupdate pasar la ubicacion actual a la anterior y la nueva a la actual como te ha dicho el compañero y luego centrar el mapa en la actual
|
![]() |
Estás aquí
|
||||||
|
||||||