- Forum-Beiträge: 103
07.01.2020, 15:40:19 via Website
07.01.2020 15:40:19 via Website
Problem:
Ich programmiere einen GPSTracker um mir daraus einen Weg anzeigen zu lassen.
Der Weg wird richtig dargestellt, d.h. longitude und latitude sind richtig
aber die Timestamp-Daten (Tag Monat Jahr) kommen bei mir falsch an und ich
weiß nicht warum.
In der MainActivity wird die Klasse WegAufzeichnungsService gestartet, die
die GPS-Daten speichert.
Auf Buttondruck wird GPSTracker gestartet, der diese GPS-Daten in einer
xml-Datei speichert, die u.a. zur Aufzeichnung des Weges dient und die
Daten Streckenlänge, Zeitpunkt von Start und Ende enthält.
Bitte um Hilfe !
/* Ausschnitt Klasse GPSTracker */
...
private List<Location> positions;
private void writePositions(String sz) {
positions=WegAufzeichnungsService.weg;
....
for(Location loc : positions) {
storeLocation(loc, writer);
}
....
}
private void storeLocation1(Location loc, BufferedWriter writer) throws IOException {
SimpleDateFormat gpxTimeFormat;
String s1;
writer.write(s1="<wpt lat=\"" + loc.getLatitude() + "\" lon=\"" + loc.getLongitude() + "\">");
writer.newLine();
String zeit0 = gpxTimeFormat.format(new Date(loc.getTime()));
//Datum völlig falsch, Uhrzeit Differenz 1 Std.
//am 06.01.20 Bsp. für Time: 22.05.00 16:04
//Anfang Testbereich
//nur zum Test
SimpleDateFormat simple = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");
Date result = new Date(loc.getTime());
String zeit2 = simple.format(result);
Log.d("GPSTracker", zeit0+" | "+zeit2);
//Ende Testbereich
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yy");
String zeit1 = sdf.format(new Date()); //nur Tag.Monat.Jahr, Ersatz für falsches Datum
String zeit = zeit1 + zeit0.substring(8); //+ Uhrzeit aus loc.getTime()
writer.write(s1="<time>" + zeit + "</time>");
writer.newLine();
writer.write("</wpt>");
writer.newLine();
}
/* Klasse WegAufzeichnungsService */
package example.com.mymapquestapp;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class WegAufzeichnungsService extends Service implements LocationListener {
private static final String LOGTAG = "WegAufzeichnungsService";
private LocationManager locationManager;
public static List<Location> weg = new ArrayList<Location>();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(LOGTAG, "create");
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
//minTime:5sec
// if (checkPermission("android.permission.ACCESS_FINE_LOCATION",5000,0)==PERMISSION_GRANTED )
try {
//Par. 2 minTime: long: minimum time interval between location updates, in milliseconds
//Par. 3 minDistance: float: minimum distance between location updates, in meters
//These two parameters work in AND relation, so in order to receive location update,
// both of their conditions need to be achieved
//Par. 4 LocationListener: onLocationChanged
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 2, this);
// locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 5000, 0, this);
} catch (SecurityException e) {
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
} catch (IllegalArgumentException e) {
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
} catch (RuntimeException e) {
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
}
Toast.makeText(getApplicationContext(), "create service", Toast.LENGTH_SHORT).show();
// weg.clear();
}
@Override
public void onDestroy() {
Log.d(LOGTAG, "destroy");
// if (checkPermission("android.permission.ACCESS_FINE_LOCATION",5000,0)==PERMISSION_GRANTED )
try {
locationManager.removeUpdates(this);
} catch (SecurityException e) {
Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
}
Toast.makeText(getApplicationContext(), "destroy service", Toast.LENGTH_SHORT).show();
super.onDestroy();
}
@Override
public void onLocationChanged(Location location) {
weg.add(location);
String s="Aktuelle Weglänge: " + weg.size() + " Punkte";
Log.d(LOGTAG, s);
Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String p) {
Log.d(LOGTAG, p);
Toast.makeText(getApplicationContext(), "onProviderDisabled", Toast.LENGTH_LONG).show();
}
@Override
public void onProviderEnabled(String p) {
Log.d(LOGTAG, p);
Toast.makeText(getApplicationContext(), "onProviderEnabled", Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String s, int status, Bundle b) {
if (status == LocationProvider.OUT_OF_SERVICE || status == LocationProvider.TEMPORARILY_UNAVAILABLE)
Toast.makeText(getApplicationContext(), "onStatusChanged:"+status, Toast.LENGTH_LONG).show();
}
}
— geändert am 07.01.2020, 16:21:06 durch Moderator
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.