Home Menu

Menu



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  
Viejo 26/09/13, 14:30:46
Avatar de Juana_La_Loca
Juana_La_Loca Juana_La_Loca no está en línea
Usuario novato en la web
Mensajes: 2
 
Fecha de registro: sep 2013
Mensajes: 2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Exclamation Remodelando aplicación de mapas

Hola. Resulta que me he encontrado con este problema intentando subir mi app al market; He tenido que generar una key nueva y ésta resulta que es válida sólo para usarla con maps v2, y ahora la aplicación que tenía desarrollada (en maps v1) no funciona con la nueva key, y tengo que reescribir parte del código.

El problema llega ahora, cuando me veo que no sé muy bien qué parte de la gran clase que mueve los mapas tengo que "traducir" o "modernizar" porque mis medios están desactualizados y estoy empezando con esto de android, osea que estoy echa un lío.
(Sé que hay documentación oficial y tutoriales y todo eso, pero no encuentro lo que me resuelva mi caso concreto en español (porque en ingles me defiendo pero no sé tanto como para seguir una explicación.)

¿Podría alguien darme aunque fuera indicaciones?
Por ejemplo, si se han sustituido los overlays, como asocio ahora el mapa con la base de datos, si es igual o... La verdad es que no sé ni por donde empezar a preguntar, porque he montado este proyecto a base de seguir tutoriales y de fijarme de otros códigos pero ahora me he bloqueado y tengo que terminar pronto

Por cierto utilizo eclipse y un dispositivo real para probar lo que hago.
A continuación está mi clase mapas:

Cita:
public class MiMapaActivity extends MapActivity {

public boolean tappedItem, mapMoved;
public static int lat1;
public static int lon1;


public static MapView mapa;
public static MapController mapController;
static LocationManager lm;


public static List<Overlay> mapOverlays;
public Capas capa_sitio;
Drawable sitio;
MyLocationOverlay miposicion;
GeoPoint miPunto;



@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mapa);


sitio = this.getResources().getDrawable(R.drawable.icon_ma rk);

mapa = (MapView) findViewById(R.id.mapa);

mapa.displayZoomControls(true);
mapa.setBuiltInZoomControls(true);
mapa.setSatellite(false);

mapController = mapa.getController();
mapController.setZoom(14);

mapOverlays = mapa.getOverlays();

capa_sitio = new Capas(this, sitio);
mapOverlays.add(capa_sitio);

miposicion = new MyLocationOverlay(this, mapa);
mapOverlays.add(miposicion);
miposicion.enableMyLocation();
miposicion.enableCompass();

miposicion.runOnFirstFix(new Runnable() {
public void run() {
mapController.animateTo(miposicion.getMyLocation() );
}
});


new Carga_Sitios_DB().execute();

}

public class Carga_Sitios_DB extends AsyncTask<Void, Integer, Void> {

private ProgressDialog cargandoMapas = new ProgressDialog(
MiMapaActivity.this);
int i;
Drawable marcador;
Capas capa;
BaseDeDatos db2;
SQLiteDatabase db;
Cursor c;
int j;

public Carga_Sitios_DB() {
super();
this.db2 = new BaseDeDatos(MiMapaActivity.this, "db_pyf",
null, BaseDeDatos.v_db);
this.db = db2.getWritableDatabase();

this.c = db
.rawQuery(
" SELECT lat, lon, nombre, descripcion, foto, _id, fecha FROM lugares",
null);
this.j = c.getCount();
}

protected void onPreExecute() {

mapOverlays.remove(capa_sitio);
capa_sitio = new Capas(MiMapaActivity.this, sitio);
capa = capa_sitio;

cargandoMapas.setMessage("Por favor espera...");
cargandoMapas.setTitle("Cargando Lugares");
cargandoMapas.setProgressStyle(ProgressDialog.STYL E_HORIZONTAL);
cargandoMapas.setCancelable(false);
cargandoMapas.setProgress(0);
cargandoMapas.setMax(j);
cargandoMapas.show();
i = 0;
}

@Override
protected Void doInBackground(Void... params) {

try {
capa.clear();

if (c.moveToFirst()) {

do {
double vlat = c.getDouble(0);
double vlon = c.getDouble(1);
String nombre = c.getString(2);
String descripcion = c.getString(3);
String foto = c.getString(4);
int id = c.getInt(5);
String fecha = c.getString(6);

String datos = nombre + ";" + descripcion + ";" + foto
+ ";" + vlat + ";" + vlon + ";" + id + ";"
+ fecha;

capa.addLocalizacion(vlat, vlon, datos);
publishProgress(i++);

} while (c.moveToNext());
}
} catch (Exception ex) {
Log.e("Base de Batos", "Error al leer la base de datos");
}
return null;
}

protected void onProgressUpdate(Integer... p) {
cargandoMapas.setProgress(p[0]);
}

@Override
protected void onPostExecute(Void pVoid) {
mapOverlays.add(capa);
mapa.postInvalidate();

cargandoMapas.dismiss();
db.close();
Log.e("Base de Batos", "El hilo acabó");
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
MapaLugaresActivity.this.finish();
miposicion.disableCompass();
miposicion.disableMyLocation();
return true;
}
return super.onKeyDown(keyCode, event);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1) {

if (resultCode == RESULT_OK) {
new Carga_Sitios_DB().execute();
}
}
}
public class Capas extends ItemizedOverlay<OverlayItem> {

public ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();

public Context context;

public Capas(Context context, Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
this.context = context;
populate();
}

public void addLocalizacion(double lat, double lon, String etiqueta) {
int lt = (int) (lat * 1E6);
int ln = (int) (lon * 1E6);
GeoPoint punto = new GeoPoint(lt, ln);
OverlayItem item = new OverlayItem(punto, etiqueta, null);
mOverlays.add(item);
populate();
}

public void addLocalizacion(OverlayItem item) {
mOverlays.add(item);
populate();
}

public void clear() {
mOverlays.clear();
populate();
}

@Override
public OverlayItem createItem(int i) {
return mOverlays.get(i);
}

@Override
public int size() {
return mOverlays.size();
}

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {

int actionType = event.getAction();
final int x = (int) event.getX();
final int y = (int) event.getY();

switch (actionType) {
case MotionEvent.ACTION_DOWN:

for (OverlayItem item : mOverlays) {
Point p = new Point(0, 0);

mapView.getProjection().toPixels(item.getPoint(), p);

if (hitTest(item, sitio, x - p.x, y - p.y)) {

String n = item.getTitle();
tappedItem = true;

Intent i = new Intent();
i.setClass(MiMapaActivity.this,
ShowActivity.class);

i.putExtra("datos", n);
startActivityForResult(i, 1);

break;
}
}

case MotionEvent.ACTION_MOVE:

if (!mapMoved) {
if (event.getHistorySize() > 0) {
if ((Math.abs(event.getX() - event.getHistoricalX(0)) > 1.0)
|| (Math.abs(event.getY()
- event.getHistoricalY(0)) > 1.0)) {
mapMoved = true;
}
}
}
break;

case MotionEvent.ACTION_UP:

if ((!mapMoved) && (!tappedItem)) {
Projection proj = mapView.getProjection();
GeoPoint loc = proj.fromPixels((int) event.getX(),
(int) event.getY());
Double lon = loc.getLongitudeE6() / 1E6;
Double lat = loc.getLatitudeE6() / 1E6;

Intent i = new Intent();

i.setAction("crear");
i.putExtra("lat", lat);
i.putExtra("lon", lon);

i.setClass(MiMapaActivity.this,
EditarActivity.class);
startActivityForResult(i, 1);

} else {

mapMoved = false;
tappedItem = false;
}

break;
}

return super.onTouchEvent(event, mapView);
}
}

public void add_place(View view) {

if (miposicion != null) {

double lat = miposicion.getMyLocation().getLatitudeE6() / 1E6;
double lon = miposicion.getMyLocation().getLongitudeE6() / 1E6;

Intent i = new Intent();

i.setAction("crear");
i.putExtra("lat", lat);
i.putExtra("lon", lon);

i.setClass(MiMapaActivity.this, EditarActivity.class);
startActivityForResult(i, 1);
} else {
Toast.makeText(
this,
"Por favor, espera...",
Toast.LENGTH_SHORT).show();
}

}

}
Gracias a los que tengáis la amabilidad de leerme hasta aquí almenos

Última edición por Juana_La_Loca Día 26/09/13 a las 14:33:47
Responder Con Cita


Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:29:57 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007