From 3a8cab88e7747dc280ce85895af014f98e80a6cc Mon Sep 17 00:00:00 2001 From: Ray Chen Date: Fri, 15 Jan 2010 13:52:41 -0800 Subject: [PATCH] Add GpsDateTime support to ExifInterface and correct images table's date_taken value to UTC timestamp. http://b/2376777 --- media/java/android/media/ExifInterface.java | 36 ++++++++++++++++++++++++----- media/java/android/media/MediaScanner.java | 2 +- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index ba7e9bb8accc..e9d33722d205 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -41,6 +41,8 @@ public class ExifInterface { public static final String TAG_GPS_LONGITUDE = "GPSLongitude"; public static final String TAG_GPS_LATITUDE_REF = "GPSLatitudeRef"; public static final String TAG_GPS_LONGITUDE_REF = "GPSLongitudeRef"; + public static final String TAG_GPS_TIMESTAMP = "GPSTimeStamp"; + public static final String TAG_GPS_DATESTAMP = "GPSDateStamp"; public static final String TAG_WHITE_BALANCE = "WhiteBalance"; // Constants used for the Orientation Exif tag. @@ -62,8 +64,7 @@ public class ExifInterface { static { System.loadLibrary("exif"); sFormatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss"); - //TODO: uncomment this when our EXIF datetime is encoded as UTC - //sFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); + sFormatter.setTimeZone(TimeZone.getTimeZone("UTC")); } private String mFilename; @@ -248,7 +249,7 @@ public class ExifInterface { } /** - * Returns number of milliseconds since Jan. 1, 1970, midnight GMT. + * Returns number of milliseconds since Jan. 1, 1970, midnight. * Returns -1 if the date time information if not available. * @hide */ @@ -258,9 +259,32 @@ public class ExifInterface { ParsePosition pos = new ParsePosition(0); try { - Date date = sFormatter.parse(dateTimeString, pos); - if (date == null) return -1; - return date.getTime(); + Date datetime = sFormatter.parse(dateTimeString, pos); + if (datetime == null) return -1; + return datetime.getTime(); + } catch (IllegalArgumentException ex) { + return -1; + } + } + + /** + * Returns number of milliseconds since Jan. 1, 1970, midnight UTC. + * Returns -1 if the date time information if not available. + * @hide + */ + public long getGpsDateTime() { + String date = mAttributes.get(TAG_GPS_DATESTAMP); + String time = mAttributes.get(TAG_GPS_TIMESTAMP); + if (date == null || time == null) return -1; + + String dateTimeString = date + ' ' + time; + if (dateTimeString == null) return -1; + + ParsePosition pos = new ParsePosition(0); + try { + Date datetime = sFormatter.parse(dateTimeString, pos); + if (datetime == null) return -1; + return datetime.getTime(); } catch (IllegalArgumentException ex) { return -1; } diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index fcb02f43140e..8c1b0ea51efb 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -744,7 +744,7 @@ public class MediaScanner values.put(Images.Media.LONGITUDE, latlng[1]); } - long time = exif.getDateTime(); + long time = exif.getGpsDateTime(); if (time != -1) { values.put(Images.Media.DATE_TAKEN, time); } -- 2.11.0