自定义相机拍照时,无法进行回调onPictureTaken()函数
错误原因:我用的是PDA ,在parameters.setPreviewSize()不能设置最大(部分机型没问题)
需要设置成屏幕近似分辨率
参考网址:
设置camera分辨率
/**
* 设置相机预览的宽高
* @param parametes
*/
public void setPreviewSize(Camera.Parameters parametes) {
List<Camera.Size> localSizes = parametes.getSupportedPreviewSizes();
Camera.Size biggestSize = null;
Camera.Size fitSize = null;// 优先选屏幕分辨率
Camera.Size targetSize = null;// 没有屏幕分辨率就取跟屏幕分辨率相近(大)的size
Camera.Size targetSiz2 = null;// 没有屏幕分辨率就取跟屏幕分辨率相近(小)的size
if(localSizes != null) {
int cameraSizeLength = localSizes.size();
for (int n = 0; n < cameraSizeLength; n++) {
Camera.Size size = localSizes.get(n);
if(biggestSize == null ||
(size.width >= biggestSize.width && size.height >= biggestSize.height)) {
biggestSize = size;
}
if(size.width == ScreenUtils.getAppScreenHeight()
&& size.height == ScreenUtils.getAppScreenWidth()) {
fitSize = size;
} else if (size.width == ScreenUtils.getAppScreenHeight()
|| size.height == ScreenUtils.getAppScreenWidth()) {
if(targetSize == null) {
targetSize = size;
} else if (size.width < ScreenUtils.getAppScreenHeight()
|| size.height < ScreenUtils.getAppScreenWidth()) {
targetSiz2 = size;
}
}
}
if(fitSize == null) {
fitSize = targetSize;
}
if(fitSize == null) {
fitSize = targetSiz2;
}
if(fitSize == null) {
fitSize = biggestSize;
}
parametes.setPreviewSize(fitSize.width, fitSize.height);
}
}
/** 输出的照片为最高像素 */
public void setPictureSize(Camera.Parameters parametes) {
List<Camera.Size> localSizes = parametes.getSupportedPictureSizes();
Camera.Size biggestSize = null;
Camera.Size fitSize = null;// 优先选预览界面的尺寸
Camera.Size previewSize = parametes.getPreviewSize();
float previewSizeScale = 0;
if(previewSize != null) {
previewSizeScale = previewSize.width / (float) previewSize.height;
}
if(localSizes != null) {
int cameraSizeLength = localSizes.size();
for (int n = 0; n < cameraSizeLength; n++) {
Camera.Size size = localSizes.get(n);
if(biggestSize == null) {
biggestSize = size;
} else if(size.width >= biggestSize.width && size.height >= biggestSize.height) {
biggestSize = size;
}
// 选出与预览界面等比的最高分辨率
if(previewSizeScale > 0
&& size.width >= previewSize.width && size.height >= previewSize.height) {
float sizeScale = size.width / (float) size.height;
if(sizeScale == previewSizeScale) {
if(fitSize == null) {
fitSize = size;
} else if(size.width >= fitSize.width && size.height >= fitSize.height) {
fitSize = size;
}
}
}
}
// 如果没有选出fitSize, 那么最大的Size就是FitSize
if(fitSize == null) {
fitSize = biggestSize;
}
parametes.setPictureSize(fitSize.width, fitSize.height);
}
}
最后在设置下就可以了
Camera.Parameters parameters = mCamera.getParameters();// 获取mCamera的参数对象
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean b, Camera camera) {
if (firstTime == 0 || System.currentTimeMillis() - firstTime > 3000) {
isAutoFocus = b;
}
}
});
// 代码在上面
setPreviewSize(parameters);
setPictureSize(parameters);