感谢您阅读此问题。我相信本网站的专家将能够提供我需要的帮助。
我正在尝试编写一个应用程序,允许用户在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的值需要与一些标题信息一起存储。
我需要一些专家建议如何正确实现这一点,而不使用任何其他第三部分类。
答案 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中的错误吗?我查看了源代码,但实际编写的值是由本机代码完成的,所以我不再深入挖掘。