Hallo liebes Forum,
habe mal angefangen ein wenig android zu programmieren und wollte eine kleine Minianwendung schreiben, die einem die Reisedistanz ausgibt. Dafür habe ich mich über LocationProvider/Listener informiert und habe mich mal an einer Implementierung versucht. Der relevante Code dazu sieht aus wie folgt:
Java
package com.example.homefinder;
import mutil.LoopList;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
public class GPSAccumulator implements LocationListener
{
private LocationManager locmanager;
private LoopList<Location> locations;
private int accum = 0;
public GPSAccumulator(Context c)
{
locmanager = (LocationManager) c.getSystemService(Context.LOCATION_SERVICE);
if (!locmanager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
//System.exit(0);
accum = -1;
}
dab += "Provider enabled: "+locmanager.isProviderEnabled(LocationManager.GPS_PROVIDER)+"\n";
locmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
locations = new LoopList<Location>();
}
public double getDistanceTravelled()
{
double d = 0;
double c = 0;
if ( locations.empty() ) return 0;
Location lastOne = locations.current();
Location currentOne;
while ( !locations.last() )
{
currentOne = locations.next();
locations.pushPointer();
while( c < 3*currentOne.getAccuracy() && !locations.last())
{
currentOne = locations.next();
c = currentOne.distanceTo(lastOne);
}
locations.reset();
d += c;
c = 0;
lastOne = currentOne;
}
locations.reset();
return d;
}
@Override
public void onLocationChanged(Location location)
{
accum++;
locations.add(location);
}
public int getLocationCount()
{
return accum;
}
public String getDebugText()
{
Location l = locmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
String s = "Längengrad: "+l.getAltitude()+" Breitengrad: "+l.getLatitude()+"\n"+dab;
return s;
}
String dab ="";
@Override
public void onProviderDisabled(String provider)
{
// TODO Auto-generated method stub
dab += "Provider disabled\n";
}
@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
dab += "Provider status changed to: "+status+"\n";
}
}
Alles anzeigen
Nun ergibt sich aber als Problem, dass obwohl ich durch
die Parameter so gesetzt habe, dass die Mindestdistanz für ein Locationupdate bei 0 liegt, ich nach meinem Verständnis also im ein-Sekunden-Takt neue Locations kriegen sollte, genau das nicht geschieht.
Konkreter gesagt bleibt die Variable accum bei 0 stehen.
Ich hoffe, ihr könnt mir helfen. Danke schon mal.
Malte