私のアプリケーションでCamera2 APIを使用する必要があります。 (Api21 +) 次のサンプルを見つけました: https://github.com/googlesamples/android-Camera2BasicAndroid Camera2のフォーカス状態が貼り付けられました
私はそれをダウンロードして携帯電話から始めました。 「Picture」ボタンを押すと、takePhotoメソッドが呼び出されます。
private void takePicture() {
lockFocus();
}
ステートマシンです。時にはこの機械がSTATE_WAITING_LOCK
に貼り付けられました。 私のデバイスはフォーカスを待っていますが、何も起こりません! (はい、私のデバイスは自動焦点をサポートしています)
case STATE_WAITING_LOCK: {
Integer afState = result.get(CaptureResult.CONTROL_AF_STATE);
if (afState == null) {
captureStillPicture();
} else if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {
// 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_CONVERGED) {
mState = STATE_PICTURE_TAKEN;
captureStillPicture();
} else {
runPrecaptureSequence();
}
}
break;
}
この問題の良い解決方法を教えてください。 そして、このプログラムは、時々ここに墜落:
private void unlockFocus() {
try {
// Reset the auto-focus trigger
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
setAutoFlash(mPreviewRequestBuilder);
/*HERE*/ mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback,
mBackgroundHandler);
// After this, the camera will go back to the normal state of preview.
mState = STATE_PREVIEW;
mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback,
mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
は、なぜ私のデバイスを集中することはできませんか?
私は同じ問題を抱えています。私はafStateの値をチェックしました、それは常にCONTROL_AF_STATE_PASSIVE_FOCUSEDに残っていますが、CONTROL_AF_STATE_NOT_FOCUSED_LOCKEDまたはCONTROL_AF_STATE_FOCUSED_LOCKEDに到達することはできません –
@ketom解決策は見つかりましたか? –