PDA

Ver la Versión Completa : [ CONSULTA ] Obtener posicion cada minuto


carrobe1390
23/02/13, 06:36:41
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

ysuran
23/02/13, 16:53:39
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

carrobe1390
23/02/13, 18:15:07
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

Gracias por tu aporte pero creo que no me explique bien a lo que ejecuto inicialmente se muestra la posicion dond estoy pero si pasa el minuto se ejcuta de nuevo pero si me movi necesito la posicion antigua en la cual estuve a lo que inicio y la posicion nueva como podria hacer eso esa es la pregunta..

ysuran
23/02/13, 18:52:45
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

carrobe1390
23/02/13, 19:14:46
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

Podrias poner un ejemplo por favor... Guardando en la sqlite..

ysuran
25/02/13, 03:00:51
Podrias poner un ejemplo por favor... Guardando en la sqlite..

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)

carrobe1390
25/02/13, 03:32:23
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)

Graciias... :dios::platano::ok: me has salvado la vida...

ysuran
25/02/13, 12:18:26
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!

carrobe1390
25/02/13, 17:38:04
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!

Talvez sea un poco abusivo de mi parte pero es que no tengo mucho conocimiento acerca de esto y algo estoi haciendo mal en el proyecto si lo podrias revisar y decirme en k estoi fallando? te agradeceria mucho en dond mainmapa es dond realizo la localizacion de los puntos con el mapa...

asavelas
26/02/13, 11:08:46
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