diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java index 4a074a3..2530da5 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/MainActivity.java @@ -16,6 +16,7 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; +import android.media.ExifInterface; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; @@ -75,6 +76,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -1170,9 +1172,44 @@ private void addImagePoi(Uri data){ byte[] imgData = createImage(data); if(imgData == null || imageMarker == null) Log.d(TAG, "image data or marker is null..."); + String file = data.getPath(); + String[] uidParts = imageMarker.getUid().split("_"); long gpId = Long.parseLong(uidParts[1]); - DbGeoPoint dbgp = (DbGeoPoint) dbHandler.getPoi(gpId, Types.GP); + + DbGeoPoint dbgp; + ExifInterface exifInterface = null; + try { + exifInterface = new ExifInterface(file); + } catch(IOException e){ + Log.e(TAG, "File " + file + " not found!"); + } + float[] exifLatLon = new float[2]; + if(exifInterface != null && exifInterface.getLatLong(exifLatLon)){ + double alt = exifInterface.getAltitude(0); + SimpleDateFormat timestampFormat = new SimpleDateFormat(""); + String timestamp = exifInterface.getAttribute(ExifInterface.TAG_DATETIME); + String latDeg = exifInterface.getAttribute(ExifInterface.TAG_GPS_LATITUDE_REF); + String lonDeg = exifInterface.getAttribute(ExifInterface.TAG_GPS_LONGITUDE_REF); + + Log.d(TAG, "Lat: " + exifLatLon[0] + ", Lon: " + exifLatLon[1]); + Log.d(TAG, "Date: " + timestamp + "; Alt: " + alt + "; LatRef: " + latDeg + "; LonRef: " + lonDeg); + + long time = 0; + if(timestamp != null){ + try { + time = timestampFormat.parse(timestamp).getTime() / 1000; + } catch(ParseException pe) { + pe.printStackTrace(); + } + } + dbgp = new DbGeoPoint(exifLatLon[0], exifLatLon[1], alt, time); + long rowId = addGp(dbgp); + dbgp.setId(rowId); + dbHandler.updatePoi(dbgp); + } else { + dbgp = (DbGeoPoint) dbHandler.getPoi(gpId, Types.GP); + } addPoi(new Image(0, dbgp.getTypeId(), imgData, dbgp)); } @@ -1196,10 +1233,8 @@ } long rowId = dbHandler.addPoi(poi); if(rowId >= 0) Toaster(getString(R.string.add_poi_success), true); - if(poi.getType() != Types.PIC) { //Images should not update typeId - dbgp.setTypeId(getTypeName(poi.getType()) + "_" + rowId); - dbHandler.updatePoi(dbgp); - } + dbgp.setTypeId(getTypeName(poi.getType()) + "_" + rowId); + dbHandler.updatePoi(dbgp); if(poi.getType() == Types.PATH){ Path path = (Path) poi;