ubicacion - geolocalizacion android tutorial
Crear una aplicaciĆ³n de seguimiento GPS de Android (1)
El código fuente de la aplicación móvil Android open-gpstracker que ha apreciado está disponible here .
Puede verificar el código usando la aplicación cliente SVN o a través de Git:
- svn checkout http://open-gpstracker.googlecode.com/svn/trunk/ open-gpstracker-read-only
- git clone https://code.google.com/p/open-gpstracker/
La depuración del código fuente seguramente te ayudará.
Recientemente me he dedicado al desarrollo de Android como hobby y estaba buscando desarrollar una aplicación que pueda encontrar y rastrear la posición de un usuario usando Google Maps.
Una vez que la aplicación tiene un bloqueo de GPS, la aplicación puede seguir sus movimientos dibujando una ruta usando una clase de superposición.
He visto aplicaciones similares como Mytracks que son de código abierto, pero ahora son demasiado complejas para mí.
Idealmente me encantaría crear una aplicación que se parece a esto
Él es mi código a continuación sin las importaciones.
Lo que intento hacer es crear una matriz de geopoints. Cada vez que cambia la ubicación, se crea un nuevo punto geográfico. Luego trato de usar un ciclo for para recorrer cada punto geográfico y dibujar un camino entre ellos.
public class Tracking extends MapActivity implements LocationListener {
LocationManager locman;
LocationListener loclis;
Location Location;
private MapView map;
List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
private MapController controller;
String provider = LocationManager.GPS_PROVIDER;
double lat;
double lon;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
initMapView();
initMyLocation();
locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// locman.requestLocationUpdates(provider,60000, 100,loclis);
// Location = locman.getLastKnownLocation(provider);
}
/** Find and initialize the map view. */
private void initMapView() {
map = (MapView) findViewById(R.id.map);
controller = map.getController();
map.setSatellite(false);
map.setBuiltInZoomControls(true);
}
/** Find Current Position on Map. */
private void initMyLocation() {
final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
overlay.enableMyLocation();
overlay.enableCompass(); // does not work in emulator
overlay.runOnFirstFix(new Runnable() {
public void run() {
// Zoom in to current location
controller.setZoom(24);
controller.animateTo(overlay.getMyLocation());
}
});
map.getOverlays().add(overlay);
}
@Override
public void onLocationChanged(Location location) {
if (Location != null) {
lat = Location.getLatitude();
lon = Location.getLongitude();
GeoPoint New_geopoint = new GeoPoint((int) (lat * 1e6),
(int) (lon * 1e6));
controller.animateTo(New_geopoint);
}
}
class MyOverlay extends Overlay {
public MyOverlay() {
}
public void draw(Canvas canvas, MapView mapv, boolean shadow) {
super.draw(canvas, mapv, shadow);
Projection projection = map.getProjection();
Path p = new Path();
for (int i = 0; i < geoPointsArray.size(); i++) {
if (i == geoPointsArray.size() - 1) {
break;
}
Point from = new Point();
Point to = new Point();
projection.toPixels(geoPointsArray.get(i), from);
projection.toPixels(geoPointsArray.get(i + 1), to);
p.moveTo(from.x, from.y);
p.lineTo(to.x, to.y);
}
Paint mPaint = new Paint();
mPaint.setStyle(Style.STROKE);
mPaint.setColor(0xFFFF0000);
mPaint.setAntiAlias(true);
canvas.drawPath(p, mPaint);
super.draw(canvas, map, shadow);
}
}
@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
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
La aplicación funciona bien sin errores pero no hay una ruta dibujada, el punto de ubicación solo se mueve mientras me muevo.
Cualquier ayuda sería muy apreciada, gracias.