正确的值存储在TAG_GPS_PROCESSING_METHOD中

时间:2013-08-21 11:40:34

标签: android gps exif

感谢您阅读此问题。我相信本网站的专家将能够提供我需要的帮助。

我正在尝试编写一个应用程序,允许用户在Android手机上编辑照片的exif信息。

作为改善用户体验的一部分,我希望尽可能应用数据验证。

对于Exif标签 - TAG_GPS_PROCESSING_METHOD我无法正确应用验证。

以下是我申请的部分代码:

String strGPSProc = etGPSProc.getText().toString();

if(strGPSProc.equalsIgnoreCase("GPS") || strGPSProc.equalsIgnoreCase("CELLID") || strGPSProc.equalsIgnoreCase("WLAN") || strGPSProc.equalsIgnoreCase("MANUAL") ) {
        returnValue = true;
}else {
        returnValue=false;
        showToast("Incorrect value for GPS Processing Method. Correct value options are GPS, CELLID, WLAN or MANUAL.");
        etGPSProc.requestFocus();
}

此代码检查在EditText中输入的值是否适用于GPSProcessingMethod,是否具有EXIF文档中所述的四个规定值中的任何一个。

但是当我尝试使用setAttribute()和saveAttributes()函数保存它时,logcat中会出现一个不可捕获的异常。

Unsupported encoding for GPSProcessingMethod

我从Exif文档中了解到,GPSProcessingMethod的值需要与一些标题信息一起存储。

我需要一些专家建议如何正确实现这一点,而不使用任何其他第三部分类。

1 个答案:

答案 0 :(得分:1)

Accoridng到Exif specification

  

<强> GPSProcessingMethod

     

记录用于定位的方法名称的字符串。第一个字节表示字符   使用的代码(表6,表7),然后是方法的名称。由于Type不是ASCII,因此为NULL   终止是没有必要的

目前,表6将字符代码列为8字节序列,因此上面应该读作“第一个字节表示......”。无论如何,ASCII的字符代码名称定义为41.H, 53.H, 43.H, 49.H, 49.H, 00.H, 00.H, 00.H.,Unicode(不出所料)55.H, 4E.H, 49.H, 43.H, 4F.H, 44.H, 45.H, 00.H。我猜这些应该就是你所需要的。

希望有所帮助。

编辑: 刚发现ExifInterface.setAttribute()只支持String值...你可以尝试在字符串的开头编码值,但我怀疑这会起作用。听起来像编码应该由setAttribute()saveAttributes()方法处理。它可能是API中的错误吗?我查看了源代码,但实际编写的值是由本机代码完成的,所以我不再深入挖掘。