1. mido86, 09.03.2011 #1
    mido86

    mido86 Threadstarter Neuer Benutzer

    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.

    Code:
    
       MapView mapView;
    	MapController mapController;
    	[COLOR=darkred]private[/COLOR] LocationManager mLocationManager;
    	[COLOR=darkred]private[/COLOR] MyLocationOverlay mMyOverlay;
    	[COLOR=darkred]private[/COLOR] GeoKontaktOverlay mMapViewOverlay;
    	[COLOR=darkred]public[/COLOR] GeoPoint oldPos;
    	[COLOR=darkred]public[/COLOR] GeoPoint aktPos;
    	[COLOR=darkred]public[/COLOR] Point oldPunkt;
    	[COLOR=darkred]public[/COLOR] Point aktPunkt;
    	List<Overlay> mapOverlays;
    
    	@Override
    	[COLOR=darkred]protected[/COLOR] [COLOR=darkred]void[/COLOR] onPause() {
    		mMyOverlay.disableMyLocation();
    		mapView.getOverlays().remove(mMyOverlay);
    		mLocationManager.removeUpdates(mMyOverlay);
    		mMyOverlay.disableCompass();
    		[COLOR=darkred]super[/COLOR].onPause();
    	}
    	
    	@Override
    	[COLOR=darkred]protected[/COLOR] [COLOR=darkred]void[/COLOR] onResume() {
    		[COLOR=darkred]super[/COLOR].onResume();
    		mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, [COLOR=darkorange]500[/COLOR].0f, mMyOverlay);
    		
    		mapView.getOverlays().add(mMyOverlay);
    		mMyOverlay.enableMyLocation();
    		mMyOverlay.enableCompass();
    		[COLOR=green]//mapView.invalidate();[/COLOR]
    		
    		mMapViewOverlay = [COLOR=darkred]new[/COLOR] GeoKontaktOverlay();
    		mapView.getOverlays().add(mMapViewOverlay);
    		mapView.invalidate();
    		
    		
    		mMyOverlay.runOnFirstFix([COLOR=darkred]new[/COLOR] Runnable() {
    			
    			@Override
    			[COLOR=darkred]public[/COLOR] [COLOR=darkred]void[/COLOR] run() {
    				
    				mapController.animateTo(mMyOverlay.getMyLocation());
    			}
    			
    		});
    	}
    
    
    	@Override
    	[COLOR=darkred]public[/COLOR] [COLOR=darkred]void[/COLOR] onCreate(Bundle savedInstanceState) {
        	[COLOR=darkred]super[/COLOR].onCreate(savedInstanceState);
        	setContentView(R.layout.main);
    
        	mapView = (MapView) findViewById(R.id.mapview);
        	mapView.setBuiltInZoomControls([COLOR=darkred]true[/COLOR]);
        	mapController = mapView.getController();
        	mapController.setZoom([COLOR=darkorange]18[/COLOR]);
        	
    		mMyOverlay = [COLOR=darkred]new[/COLOR] MyLocationOverlay([COLOR=darkred]this[/COLOR], mapView) {
    			
    			[COLOR=darkred]public[/COLOR] [COLOR=darkred]synchronized[/COLOR] [COLOR=darkred]void[/COLOR] onLocationChanged(Location location) {
    					[COLOR=darkred]super[/COLOR].onLocationChanged(location);
    					
    			    	oldPos = mMyOverlay.getMyLocation();
    	 		    	[COLOR=darkred]final[/COLOR] GeoPoint mypoint = [COLOR=darkred]new[/COLOR]  GeoPoint(([COLOR=darkred]int[/COLOR])(location.getLatitude() * 1E6),  ([COLOR=darkred]int[/COLOR])(location.getLongitude() * 1E6));
    			    	aktPos = mypoint;
    			    	mapController.animateTo(mypoint);
    				}
    			
    		};
    		
    		
    		mMapViewOverlay = [COLOR=darkred]new[/COLOR] GeoKontaktOverlay();
        	
        	
        	mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    		mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000L, [COLOR=darkorange]3[/COLOR].0f, mMyOverlay);
    
    	}
    
    [COLOR=darkred]private[/COLOR] [COLOR=darkred]class[/COLOR] GeoKontaktOverlay [COLOR=darkred]extends[/COLOR] Overlay {
    
    		  [COLOR=green]//final RectF mRect = new RectF();[/COLOR]
    		  [COLOR=darkred]final[/COLOR] Paint mPaint = [COLOR=darkred]new[/COLOR] Paint();
    
    		@Override
    		[COLOR=darkred]public[/COLOR] [COLOR=darkred]void[/COLOR] draw(Canvas canvas, MapView mapView, [COLOR=darkred]boolean[/COLOR] shadow) {
    			[COLOR=green]//super.draw(canvas, mapView, shadow);[/COLOR]
    
    			oldPunkt = [COLOR=darkred]new[/COLOR] Point();
    			aktPunkt = [COLOR=darkred]new[/COLOR] Point();
    			
    			mapView.getProjection().toPixels(oldPos, oldPunkt) ;
    			mapView.getProjection().toPixels(aktPos, aktPunkt);
    				  
    			canvas.drawLine(aktPunkt.x, aktPunkt.y,oldPunkt.x, oldPunkt.y, mPaint);
    			
    			[COLOR=darkred]super[/COLOR].draw(canvas, mapView, shadow);
    		}
    	}
    
    	@Override
    	[COLOR=darkred]protected[/COLOR] [COLOR=darkred]boolean[/COLOR] isRouteDisplayed() {
    		[COLOR=darkred]return[/COLOR] [COLOR=darkred]false[/COLOR];
    	}