CameraSource .setAutoFocusEnabled (true) devuelve: el enfoque automático de la cámara no es compatible con este dispositivo, aunque el dispositivo admite el enfoque automático

A continuación se muestra mi actividad de escáner de código de barras, todo funciona bien, excepto setAutoFocusEnabled (verdadero). Devuelve un mensaje en tiempo de ejecución que dice que mi dispositivo no admite el enfoque automático, aunque el Samsung Tab E T561 es un dispositivo habilitado para enfoque automático.

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.EditText;

import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;

import java.io.IOException;

import static com.google.android.gms.vision.CameraSource.CAMERA_FACING_BACK;
import static com.google.android.gms.vision.CameraSource.CAMERA_FACING_FRONT;

public class ScanBarcodeActivity extends AppCompatActivity {

    private String TAG = "ScanBarcodeActivity";
    private BarcodeDetector barcodeDetector;
    private SurfaceView cameraView;
    private CameraSource cameraSource;
    private EditText cardNo;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_barcode);
    }

    @Override
    protected void onResume() {
        cameraView = (SurfaceView) findViewById(R.id.surfaceViewCamera);
        cardNo = (EditText) findViewById(R.id.editTextBarcode);

        scanBarcodeCam(0);
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        if(cameraSource != null) {
            cameraSource.stop();
            cameraSource.release();
            cameraSource = null;
        }

        super.onDestroy();
    }

    public void switchCam(View view) {

        if(cameraSource.getCameraFacing() == CAMERA_FACING_BACK) {
            cameraSource.stop();
            cameraSource.release();
            cameraSource = null;
            scanBarcodeCam(0);
            Log.i(TAG, "switchCam to front");
        } else {
            cameraSource.stop();
            cameraSource.release();
            cameraSource = null;
            scanBarcodeCam(1);
            Log.i(TAG, "switchCam to back");
        }

    }

    public void scanBarcodeCam(int cam) {

        if(barcodeDetector == null) {
            barcodeDetector = new BarcodeDetector.Builder(this)
                    .setBarcodeFormats(Barcode.EAN_13)
                    .build();
        }

        if(cam == 0) {
            cameraSource = new CameraSource
                    .Builder(this, barcodeDetector)
                    .setRequestedPreviewSize(640, 480)
                    .setFacing(CAMERA_FACING_FRONT)
                    .setRequestedFps(30.0f)
                    .build();
        } else if(cam == 1) {
            cameraSource = new CameraSource
                    .Builder(this, barcodeDetector)
                    .setRequestedPreviewSize(640, 480)
                    .setFacing(CAMERA_FACING_BACK)
                    .setRequestedFps(30.0f)
                    .setAutoFocusEnabled(true)
                    .build();
        }

        if(!cameraView.getHolder().getSurface().isValid()) {
            Log.i(TAG, "*** new SurfaceHolder");
            cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    try {
                        cameraSource.start(cameraView.getHolder());
                    } catch (IOException | RuntimeException e) {
                        Log.e(TAG, e.getMessage());
                    }
                }

                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    if (cameraSource != null) {
                        cameraSource.stop();
                        cameraSource.release();
                        cameraSource = null;
                    }
                }
            });
        } else {
            try {
                cameraSource.start(cameraView.getHolder());
            } catch(IOException e) {
                Log.e(TAG, e.getMessage());
            }
        }

        barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
            @Override
            public void release() {

            }

            @Override
            public void receiveDetections(Detector.Detections<Barcode> detections) {
                final SparseArray<Barcode> barcodes = detections.getDetectedItems();

                if(barcodes.size() != 0) {
                    cardNo.post(new Runnable() {
                        @Override
                        public void run() {
                            cardNo.setText(barcodes.valueAt(0).displayValue);
                        }
                    });
                }
            }
        });
    }
}

Cualquier ayuda sería muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta