android4.4中,将字体设置为超大字体后,图库详情中某些项格式不正确。如下图
为什么小字体没问题,大字体有问题呢?
这些值都是通过读取exif信息得到的,那就只有一种可能,制造商和模型的制造商两项的exif信息有问题。
通过看hal层代码camera_exif.h发现一段代码:
char exif_str_maker[128]="K-TOUCH";
char exif_str_model[128]="K-Touch Kis 7";
exif_str_maker[127]=0;
exif_str_model[127]=0;
static customExifInfo_t exifTag={0};
memcpy(exifTag.strMake,exif_str_maker,31);
memcpy(exifTag.strModel,exif_str_model,31);
strcpy((char *)exifTag.strSoftware,"custom software");
其中memcpy的时候第三个参数为31,引入了过多的空格。第一反应是改为strlen(exif_str_maker)+1,但是可能涉及很多问题。
为何不把问题想简单点,从gallery获取exif值时将过多空格去掉,
所以最终的解法是在gallery的MediaDetails.java中将setexifdata()修改为:
private static void setExifData(MediaDetails details, ExifTag tag,
int key) {
if (tag != null) {
String value = null;
int type = tag.getDataType();
if (type == ExifTag.TYPE_UNSIGNED_RATIONAL || type == ExifTag.TYPE_RATIONAL) {
value = String.valueOf(tag.getValueAsRational(0).toDouble());
} else if (type == ExifTag.TYPE_ASCII) {
value = tag.getValueAsString();
} else {
value = String.valueOf(tag.forceGetValueAsLong(0));
}
if (key == MediaDetails.INDEX_FLASH) {
MediaDetails.FlashState state = new MediaDetails.FlashState(
Integer.valueOf(value.toString()));
details.addDetail(key, state);
} else {
//modify start
//details.addDetail(key, value);
if (key == MediaDetails.INDEX_MODEL || key == MediaDetails.INDEX_MAKE){
details.addDetail(key, value.trim());
} else {
details.addDetail(key, value);
}
//modify end
}
}
}
在将新编出的Gallery程序push到手机,一切正常。