hallo,
ich versuche gerade eine GPS-Tracking app (in vereinfachter version) aufzubauen.
1.Jedoch habe ich Probleme beim Test auf nem realen Android-Handy beim Positions update, mal wird die aktuelle korrekte Position kurz angezeigt, dann geht Sie wieder verloren.
Im Emulator funzt das theoretisch alles.
2. Das nächste Problem ist das ich versuche die strecke (bzw punkte) nach zu zeichnen die ich laufe.
Ich versuche das von punkt zu punkt zu machen, was bei mir schon direkt zum App absturz führt.
Da liegt wahrscheinlich ein denk fehler bei mir, vlt sieht ihn jemand.
Java
MapView mapView;
MapController mapController;
private LocationManager mLocationManager;
private MyLocationOverlay mMyOverlay;
private GeoKontaktOverlay mMapViewOverlay;
public GeoPoint oldPos;
public GeoPoint aktPos;
public Point oldPunkt;
public Point aktPunkt;
List<Overlay> mapOverlays;
@Override
protected void onPause() {
mMyOverlay.disableMyLocation();
mapView.getOverlays().remove(mMyOverlay);
mLocationManager.removeUpdates(mMyOverlay);
mMyOverlay.disableCompass();
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 500.0f, mMyOverlay);
mapView.getOverlays().add(mMyOverlay);
mMyOverlay.enableMyLocation();
mMyOverlay.enableCompass();
//mapView.invalidate();
mMapViewOverlay = new GeoKontaktOverlay();
mapView.getOverlays().add(mMapViewOverlay);
mapView.invalidate();
mMyOverlay.runOnFirstFix(new Runnable() {
@Override
public void run() {
mapController.animateTo(mMyOverlay.getMyLocation());
}
});
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(18);
mMyOverlay = new MyLocationOverlay(this, mapView) {
public synchronized void onLocationChanged(Location location) {
super.onLocationChanged(location);
oldPos = mMyOverlay.getMyLocation();
final GeoPoint mypoint = new GeoPoint((int)(location.getLatitude() * 1E6), (int)(location.getLongitude() * 1E6));
aktPos = mypoint;
mapController.animateTo(mypoint);
}
};
mMapViewOverlay = new GeoKontaktOverlay();
mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, 3.0f, mMyOverlay);
}
private class GeoKontaktOverlay extends Overlay {
//final RectF mRect = new RectF();
final Paint mPaint = new Paint();
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
//super.draw(canvas, mapView, shadow);
oldPunkt = new Point();
aktPunkt = new Point();
mapView.getProjection().toPixels(oldPos, oldPunkt) ;
mapView.getProjection().toPixels(aktPos, aktPunkt);
canvas.drawLine(aktPunkt.x, aktPunkt.y,oldPunkt.x, oldPunkt.y, mPaint);
super.draw(canvas, mapView, shadow);
}
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
Alles anzeigen