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

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

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

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

Если вы используете 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); 

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

Дуб ваш код не поддерживает 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.

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

 @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 } 
Intereting Posts
Разрешить множественное время выполнения Всплывающее меню в пользовательском ListView Проблема с загрузкой изображения с Android на Mysql JobScheduler – Как определить уникальный идентификатор задания? Для чего используется cursor.setNotificationUri ()? SQLite: не удается привязать аргумент к индексу 1, потому что индекс выходит за пределы диапазона. Оператор имеет 0 параметров Дооснащение + OkHTTP – кэш ответов не работает Изменение TextField запускает полный цикл компоновки Автозаполнение текста в android? Значок кнопки изменения Android при нажатии Высота макета Android минимальна match_parent, но wrap_content, если содержимое больше родительского Уведомление Android GCM для приложения локализации Улавливание события при выпадении счетчика Создать круговое раскрытие для устройств с предварительным охлаждением Android listview отображает все доступные элементы без прокрутки со статическим заголовком