Android:将GPSTimeStamp放入jpg EXIF标签

我试图通过android将“GPSTimeStamp”设置为jpg的exif标签。 这篇文档非常缺乏:
http://developer.android.com/reference/android/media/ExifInterface.html#TAG_GPS_TIMESTAMPtypes为String。 常数值:“GPSTimeStamp”。 但确切的格式是什么?

在这里: http : //www.sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html
GPSTimeStamp:rational64u [3](写入时,如果存在则删除日期,如果包含时区,则将时间调整为UTC)

所以我需要一个3单元arrays的长值? 我不知道,该放什么。我已经获得了“此修复的UTC时间,自1970年1月1日起以毫秒为单位。” 通过location.gettime()。
http://developer.android.com/reference/android/location/Location.html#getTime%28%29
如果我将长值作为字符串写入时间戳并通过Linux上的“exif”检查exif标签,我会得到错误“denominator expected”。 所有使用hh:mm:ss或其他格式的实验都失败了。 在这里有点迷失。

适用于采样时间14:22:32 GPSTimeStamp属性的正确格式是

 "14/1,22/1,32/1" 

您可以使用以下代码:

 Location location = ...; // TODO - Set location properly. long locationTome = location.getTime(); ExifInterface imageExif = new ExifInterface("absolute_path_to_image"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(locationTome); int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); int minutes = calendar.get(Calendar.MINUTE); int seconds = calendar.get(Calendar.SECOND); String exifGPSTimestamp = hourOfDay + "/1," + minutes + "/1," + seconds + "/1"; imageExif.setAttribute("GPSTimeStamp", exifGPSTimestamp); imageExif.saveAttributes(); 

它具有与GPSLatitudeGPSLongitude属性类似的格式。 这种格式的有用解释也可以在这里find: http : //www.ridgesolutions.ie/index.php/2015/03/05/geotag-exif-gps-latitude-field-format/

在Android的Camera.java源代码中,方法setGpsTimestamp具有以下描述和实现:

  /** * Sets GPS timestamp. This will be stored in JPEG EXIF header. * * @param timestamp GPS timestamp (UTC in seconds since January 1, * 1970). */ public void setGpsTimestamp(long timestamp) { set(KEY_GPS_TIMESTAMP, Long.toString(timestamp)); } 

因此,您的修复的UTC时间(以毫秒为单位)必须转换为秒,因此只需要除以1000即可。