Search code examples
androidandroid-cameracamera2

Android Camera2 API - Detect when we have focus


So, I managed to create the functionality i wanted with the old camera the way I wanted it.

With mCamera.autoFocus(autoFocusCallback); i detect when I have focus and run the required code while in preview-mode.

Now I have a hard time grasping how to do the same in camera2 API. My first idea was that i'd use

        private void process(CaptureResult result) {
        switch (mState) {
            case STATE_PREVIEW: {
                // We have nothing to do when the camera preview is working normally.
                int afState = result.get(CaptureResult.CONTROL_AF_STATE);
                //if (CaptureResult.CONTROL_AF_STATE == afState) {
                    Log.d("SOME KIND OF FOCUS", "WE HAVE");
                //}

                break;
            }
}

but I fail to find some kind of state that tells me we have gotten focus. Does someone have any idea how this can be done with Camera2 API?


Solution

  • You've basically got it. The list of states you can check for and their transitions can be found here.

    It depends on what CONTROL_AF_MODE you are using, but generally you check for FOCUSED_LOCKED or perhaps PASSIVE_FOCUSED, though you may want to have cases for NOT_FOCUSED_LOCKED and PASSIVE_UNFOCUSED in case the camera just cannot focus on the scene.