5.第4个callback返回数据(这个callback是最重要的,而且是不可缺省的,也就是说前3个callback设置成Null也不会影响拍照功能),见如下代码:
private final class JpegPictureCallback implements PictureCallback {
public void onPictureTaken(final byte[] jpegData, final android.hardware.Camera camera) {
//jpegData为JPEG数据,是由HAL层根据应用传输的各种参数(即Camera.Parameters的实例)以及JPEG压缩算法生成的。
mImageCapture.storeImage(jpegData, camera, mLocation);
}
}
三.Exif使用方法及代码优化方案
什么地方用到Exif信息呢?我遇到的至少有如下这么几个地方:
1.生成右上角所略图;
2.图片显示应用,例如android自带的gallery3d应用;
3.图片回显;
4.短(彩)信等需要添加camera附件的应用.
看看源码: ImageManager中是这样读取Exif方向参数的。
public static int getExifOrientation(String filepath) {
int degree = 0;
ExifInterface exif = null;
try {
exif = new ExifInterface(filepath);
} catch (IOException ex) {
Log.e(TAG, "cannot read exif", ex);
}
if (exif != null) {
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION, -1);
if (orientation != -1) {
// We only recognize a subset of orientation tag values.
switch(orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
}
}
return degree;
}
这个方法可以进一步优化,从而对于Exif信息的写入不再依赖底层。那就是比较一下传输给底层的orientation与实际返回的是否相等,不相等就是底层写入Exif信息出错,我们就可以在应用层进行修正。
可以添加一个判断分支如下:(其中EXIF_ORIENTATION是我们缓存的应用传给底层的值)。










