Как определить, есть ли фронтальная камера и есть ли доступ и использовать фронтальную камеру? - PullRequest
5 голосов
/ 15 октября 2010

Как определить, есть ли фронтальная камера и есть ли доступ и использовать фронтальную камеру?

Ответы [ 4 ]

19 голосов
/ 09 июля 2011

Если вы используете API уровня 9 (Android 2.3) или выше, вы можете сделать следующее для расчета индекса (первой) фронтальной камеры:

int getFrontCameraId() {
    CameraInfo ci = new CameraInfo();
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) {
        Camera.getCameraInfo(i, ci);
        if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i;
    }
    return -1; // No front-facing camera found
}

затем вы можете использовать индекс для метода Camera.open, например ::

int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);

Чтобы получить соответствующую камеру.

5 голосов
/ 31 августа 2015

Oak ваш код не будет поддерживать SDK выше 21, поэтому я добавил эти строки, чтобы сделать его пригодным для использования :)

    int getFrontCameraId(CameraManager cManager) {
    if (Build.VERSION.SDK_INT < 22) {
        Camera.CameraInfo ci = new Camera.CameraInfo();
        for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
            Camera.getCameraInfo(i, ci);
            if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
        }
    } else {
        try {
            for ( int j = 0;j<cManager.getCameraIdList().length; j++) {
                String[] cameraId = cManager.getCameraIdList();
                CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
                int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
                if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT) 
                    return j;
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    return -1; // No front-facing camera found
}

Я обновил код Oak, который теперь также поддерживает новую библиотеку camera2.

1 голос
/ 15 октября 2010

Как определить, есть ли фронтальная камера и есть ли доступ и использовать фронтальную камеру?

Для этого нет API, по крайней мере, через Android 2.2. Если повезет, в следующем выпуске Gingerbread будет добавлена ​​встроенная поддержка фронтальных камер. Извините!

0 голосов
/ 07 марта 2016

Kalpit, я не знаю, как вам удалось заставить код работать.Я пытался отредактировать ваш ответ, но полный ответ нужно изменить.Вот что я получил.

@SuppressLint("NewApi" )
int getFrontCameraId() {
    if (Build.VERSION.SDK_INT < 22) {
        Camera.CameraInfo ci = new Camera.CameraInfo();
        for (int i = 0; i < Camera.getNumberOfCameras(); i++) {
            Camera.getCameraInfo(i, ci);
            if (ci.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) return i;
        }
    } else {
        try {
            CameraManager cManager = (CameraManager) getApplicationContext()
               .getSystemService(Context.CAMERA_SERVICE);
            String[] cameraId = cManager.getCameraIdList();
            for ( int j = 0;j<cameraId.length; j++) {
                CameraCharacteristics characteristics = cManager.getCameraCharacteristics(cameraId[j]);
                int cOrientation = characteristics.get(CameraCharacteristics.LENS_FACING);
                if (cOrientation == CameraCharacteristics.LENS_FACING_FRONT)
                    return Integer.parseInt(cameraId[j]);
            }
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }
    return -1; // No front-facing camera found
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...