第二次拍照没有反应我打LOG了您

这是第一次拍照成功的时候

这是第二次拍照失败的时候的时候 doStillCapture函数都没走到

@18Gray

问题在这段代码中但是我不知道该怎么改
Integer afState = result.get(CaptureResult.CONTROL_AF_STATE); ==0造成的但是不知道具体原因
我找了一个魅族note3,5.1系统,没有啥问题,你先把这句代码去掉试一下
我找了一个魅族note3,5.1系统,没有啥问题,你先把这句代码去掉试一下
我用的是两个7.0系统的手机,我不知道是不是手机的问题
找到问题所在了afState这个值在第二次的时候等于0造成的,代码被我改造了您可以看一下,直接复制粘贴就行
private void checkState(CaptureRequest request, CaptureResult result) { Integer afState = result.get(CaptureResult.CONTROL_AF_STATE); Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); switch (mState) {
case STATE_PREVIEW: //对预览数据处理,根据afState即聚焦状态,如果为空、跟上次一样不做处理
if (afState == null)
{
Log.d("Camera2TextureView", "null");
return;
}else if (afState != null && afState.intValue() == mAfState)//这次的值与之前的一样,忽略掉
{
Log.d("Camera2TextureView", "same");
return;
}else {
mAfState = afState.intValue();
judgeFocus(); //聚焦视图
}
break;
case STATE_WAITING_LOCK:
// if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState // || CaptureResult.CONTROL_AF_STATE_PASSIVE_FOCUSED == afState || CaptureResult.CONTROL_AF_STATE_PASSIVE_UNFOCUSED == afState) // { // if (afState == null) // { // Log.i("qwe","1"); // doStillCapture(); // } // else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState // || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) // { // aeState = result.get(CaptureResult.CONTROL_AE_STATE); // // if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) // { // Log.i("qwe","2"); // mState = STATE_PICTURE_TAKEN; // doStillCapture(); // } else // { // Log.i("qwe","3"); // tryCaptureAgain(); // } // } // } // 等待锁定的状态, 某些设备完成锁定后CONTROL_AF_STATE可能为null if (afState == null || afState==0) { doStillCapture(); } else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState || CaptureResult.CONTROL_AF_STATE_PASSIVE_FOCUSED == afState || CaptureResult.CONTROL_AF_STATE_PASSIVE_UNFOCUSED == afState) { // 如果焦点已经锁定(不管自动对焦是否成功), 检查AE的返回, 注意某些设备CONTROL_AE_STATE可 // 能为空 // Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); if (aeState == null || aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) { // 如果自动曝光(AE)设定良好, 将状态置为已经拍照, 执行拍照 mState = STATE_PICTURE_TAKEN; doStillCapture(); } else { // 以上条件都不满足, 执行预拍照系列操作 tryCaptureAgain(); } } break;
case STATE_WAITING_PRECAPTURE:
// 等待预处理状态, 某些设备CONTROL_AE_STATE可能为null
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE ||
aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
// 如果AE需要做于拍照或者需要闪光灯, 将状态置为"非等待预拍照"(翻译得有点勉强)
mState = STATE_WAITING_NON_PRECAPTURE;
}
break;
case STATE_WAITING_NON_PRECAPTURE:
// 某些设备CONTROL_AE_STATE可能为null
if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
// 如果AE做完"非等待预拍照", 将状态置为已经拍照, 并执行拍照操作
mState = STATE_PICTURE_TAKEN;
doStillCapture();
}
break;
}
} @18Gray
