android - 使用 Android Camera2,应用程序无限期卡在 STATE_WAITING_PRECAPTURE 或 STATE_WAITING_NON_PRECAPTURE
问题描述
我正在使用Android Camera2 API。我想知道什么时候是合适的时间:
- 最初显示TakePicture按钮(即相机已准备好拍摄照片)。
- 再次显示此按钮(如果拍照过程失败,当然完成后),因为我在单击它时将其隐藏(以捕获图片)。
我试过takePicture.setVisibility(View.GONE)
了。lockFocus()
_ 虽然这在大多数情况下都有效,但有时按钮会消失并且再也不会出现(我猜是当拍照过程失败时),尤其是在非常快速地单击它时(一旦它出现在屏幕上)。此时没有错误和崩溃发生。takePicture.setVisibility(View.VISIBLE)
unlockFocus()
代码取自googlesamples/android-Camera2Basic。
更新:
takePicture.setVisibility(View.VISIBLE)
我在里面试过onCaptureSequenceCompleted
。该按钮确实出现了,但是单击它时不会重新启动捕获图片的过程(请参阅此七秒视频)。发生这种情况时,onCaptureFailed
不会调用 。但是,它会无限期地陷入STATE_WAITING_PRECAPTURE
或STATE_WAITING_NON_PRECAPTURE
因为aeState
不满足if
条件而陷入困境。
case STATE_WAITING_PRECAPTURE: {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null ||
aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE ||
aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
mState = STATE_WAITING_NON_PRECAPTURE;
}
break;
}
case STATE_WAITING_NON_PRECAPTURE: {
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
}
break;
}
解决方案
我觉得应该是这样的
case STATE_WAITING_PRECAPTURE:
{
JQLog.d(TAG, "STATE_WAITING_PRECAPTURE");
// CONTROL_AE_STATE can be null on some devices
Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
if (aeState == null
|| aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE
|| aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED
|| aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
state = STATE_WAITING_NON_PRECAPTURE;
}
break;
}
推荐阅读
- jquery - JQUERY $(this).next issue
- python - 如何在 Python 和 Plotly 中使用下拉菜单进行数据选择
- java - 无法在项目上运行 Gradle 任务
- ios - iOS:退出后 ADAL 自动登录
- flowtype - flowtype 中的自引用泛型类型
- machine-learning - 我无法使用 python 在 sklearn (scikit-learn) 中训练模型
- github - 将所有 GitHub 存储库从一个用户转移到另一个用户
- python - 你如何在python中的图中绘制峰值
- alexa - 如何正确使用 SSML 向 Alexa 发送时间?
- sql-server - 计算组内的行差异