In my camera app i have a button to change the camera facing in to front or back ,I can capture and save images using back camera ,but when i switch to front camera i could not capture images . This is how i am switching camera to front or back .
ImageView switch_camera =(ImageView) rootview.findViewById(R.id.imageView7);
switch_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// facing = characteristics.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
//isfrontcam=true;
try {
//manager.openCamera(getBackFacingCameraId(manager), mStateCallback, mBackgroundHandler);
closeCamera();
openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"0");
Log.e("opening ","BackCam");
facing = 1;
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
} else if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) {
// isfrontcam = true;
try {
//manager.openCamera(getFrontFacingCameraId(manager), mStateCallback, mBackgroundHandler);
// characteristics = manager.getCameraCharacteristics("1");
closeCamera();
openCamera(mTextureView.getWidth(), mTextureView.getHeight(),"1");
Log.e("opening ", "FrontCam");
String str = getBackFacingCameraId(manager);
facing= 0;
Log.e("str", "id" + str);
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
On capture button click ,i am calling this function to capture images ;
private void lockFocus() {
try {
// This is how to tell the camera to lock focus.
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER,
CameraMetadata.CONTROL_AF_TRIGGER_START);
// Tell #mCaptureCallback to wait for the lock.
mState = STATE_WAITING_LOCK;
mCaptureSession.capture(mPreviewRequestBuilder.build(),mCaptureCallback,
mBackgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
Well, all you need to do is download a simple app called 'Camera2 API probe' from the Google Play Store and run it. The app gives detailed info about both the rear and front camera sensors of your Android phone. From that info, you can easily deduce whether your Android device supports Camera2 API or not.
Camera2 is the latest low-level Android camera package and replaces the deprecated Camera class. Camera2 provides in-depth controls for complex use cases, but requires you to manage device-specific configurations. You can read about specific Camera2 classes and functions in the reference documentation.
Check your CameraCaptureSession.CaptureCallback : probably the camera has the state CONTROL_AF_STATE_INACTIVE. And as it is waiting for the focus...the picture will never been taken.
it should be like this
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 ||
CaptureResult.CONTROL_AF_STATE_INACTIVE == afState /*add this*/) {
// 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;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With