Hallo zusammen,
ich bin Anfänger und bin im Moment dabei ein Jogging-App zu programmieren.
Hierbei möchte ich mir meine zurückgelegte Distanz anzeigen lassen.
Ich programmiere in Android Studio, meine Service sieht wie folgt aus:
In der Main soll jedes mal, wenn eine neue Location aufgenommen wurde die Distanz zwischen der alten Location und der neuen Location berechnet werden.
Die Distanzen sollen zudem aufsummiert werden, da ich ja die Gesamtdistanz ab Start angezeigt haben möchte.
Die Methode, in der die Distanz berechnet werden soll, sieht wie folgt aus:
Nun habe ich das Problem, dass zwar etwas ausgegeben wird jedoch völlig unrealistische Werte.
Bsp: Ich laufe eine Strecke von 1,8km und meine App zeigt eine Distanz von rund 6000km..
Ich bin schon ewig auf Fehlersuche doch kann meinen Fehler einfach nicht finden.
Ich hoffe mir kann jemand weiterhelfen und bedanke mich schonmal im voraus für die Antworten!
ich bin Anfänger und bin im Moment dabei ein Jogging-App zu programmieren.
Hierbei möchte ich mir meine zurückgelegte Distanz anzeigen lassen.
Ich programmiere in Android Studio, meine Service sieht wie folgt aus:
Java:
package com.example.joggingapp;
import android.Manifest;
import android.app.Service;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import java.util.ArrayList;
import java.util.List;
public class WegAufzeichnungsService extends Service implements LocationListener {
private LocationManager locationManager;
public static Handler updateHandler;
public static ArrayList<Location> weg = new ArrayList<Location>();
public static Location oldLocation;
public static Location newLocation;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, (LocationListener) this);
//weg.clear();
}
@Override
public void onDestroy() {
locationManager.removeUpdates(this);
super.onDestroy();
}
@Override
public void onLocationChanged(@NonNull Location location) {
weg.add(location);
if (updateHandler != null) {
updateHandler.sendEmptyMessage(1);
}
}
}
In der Main soll jedes mal, wenn eine neue Location aufgenommen wurde die Distanz zwischen der alten Location und der neuen Location berechnet werden.
Die Distanzen sollen zudem aufsummiert werden, da ich ja die Gesamtdistanz ab Start angezeigt haben möchte.
Die Methode, in der die Distanz berechnet werden soll, sieht wie folgt aus:
Java:
private TextView vStrecke;
private WegHandler handler = new WegHandler();
public float currentDistanz;
public float rundWeg;
private class WegHandler extends Handler {
@Override
public void handleMessage(Message msg)
{
berechneStrecke();
}
}
//Berechnung der zurückgelegten Distanz
public void berechneStrecke()
{
List<Location> weg = WegAufzeichnungsService.weg;
if(weg.size()>1)
{
for(int i=1; i<weg.size(); i++)
{
currentDistanz += ((weg.get(i-1).distanceTo(weg.get(i))) / 1000);
}
}
rundWeg = (float)(((int)(currentDistanz*100))/100.0);
vStrecke.setText(Float.toString(rundWeg));
}
Nun habe ich das Problem, dass zwar etwas ausgegeben wird jedoch völlig unrealistische Werte.
Bsp: Ich laufe eine Strecke von 1,8km und meine App zeigt eine Distanz von rund 6000km..
Ich bin schon ewig auf Fehlersuche doch kann meinen Fehler einfach nicht finden.
Ich hoffe mir kann jemand weiterhelfen und bedanke mich schonmal im voraus für die Antworten!
Zuletzt bearbeitet: