Фронтальная камера Android Camera2

Недавно я заметил, что Camera API устарел, и нашел новый API под названием Camera2.

Я читал документацию, но я действительно не понимаю ее.

Итак, мой вопрос: как мне просмотреть переднюю камеру с новым API камеры?

Просто превью, а не запись.

Я хочу использовать этот новый API, потому что я предполагаю, что в будущем текущий API камеры будет заменен и перестанет работать.

Поэтому я хочу быть готовым и просто сидеть и смотреть, пока все паникуют. XD


person YOYOYO    schedule 08.09.2015    source источник


Ответы (4)


Первым делом узнайте id своей фронтальной камеры (если она конечно есть)

    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
            try {
                return manager.getCameraIdList();
            } catch (CameraAccessException e) {
                return null;
            }

Затем найдите faceCamera следующим образом:

CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(cameraId);

        if (cameraCharacteristics == null)
            throw new NullPointerException("No camera with id " + cameraId);

        return cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT;

Наконец, вы должны установить камеру с этим идентификатором:

CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
   try {
       characteristics = manager.getCameraCharacteristics(mCameraId);
   }  catch (CameraAccessException e) {
       e.printStackTrace();
   } 

Обратите внимание, что это всего лишь советы о том, как делать то, что вы хотите. Подробные сведения о том, как запустить предварительный просмотр, и многое другое см. по адресу: http://developer.android.com/samples/Camera2Basic/index.html

person user0770    schedule 18.09.2015

0 для задней панели 1 для передней панели

Для Задней камеры мы должны сделать это внутри метода openCamera:

cameraId = manager.getCameraIdList()[0];

Для камеры, обращенной к Front, мы должны добавить следующую строку внутри метода openCamera:

cameraId = manager.getCameraIdList()[1];

Я добавил все коды и скриншот здесь

введите здесь описание изображения

person Steve    schedule 17.11.2016
comment
если посмотреть исходник public static final int LENS_FACING_BACK = 1; -_- - person Dr. aNdRO; 07.05.2018
comment
Этот ответ следует удалить, поскольку он указывает на ложные внешние источники. - person francogrex; 20.05.2020
comment
@francogrex Спасибо, что указали на это. Пожалуйста, проверьте эту ссылку justpaste.it/3a970 - person Steve; 22.05.2020

Мы можем получить характеристики камер в нашем устройстве

   private void getCameraCharacteristics (){
       try {
       CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
           for(String id : manager.getCameraIdList()){
               Log.e(TAG, "Camara: Id " + id );
               CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
               List<CameraCharacteristics.Key<?>> listaCaracteristicas = cameraCharacteristics.getKeys();
               for(CameraCharacteristics.Key<?> caracteristica : listaCaracteristicas){
                   Log.i(TAG,  "caracteristic: " + caracteristica.getName()  + " : " + cameraCharacteristics.get(caracteristica));
               }
               Log.i(TAG, listaCaracteristicas.toString());
           }
       } catch (CameraAccessException e) {
           e.printStackTrace();
       }

   }

одна из этих характеристик равна android.lens.facing, поэтому на основе этого значения мы можем получить Фронтальную камеру:

 if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
              //Frontal camera
  }

Это метод получения этого значения:

private String getIdFrontalCamera () {
    try {
        CameraManager manager=(CameraManager)getSystemService(Context.CAMERA_SERVICE);
        for(String id : manager.getCameraIdList()){
            CameraCharacteristics cameraCharacteristics = manager.getCameraCharacteristics(id);
            //Seek frontal camera.
            if(cameraCharacteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT){
                Log.i(TAG, "Camara frontal id " + id);
                return id;
            }
        }
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
    return "0";
}

в большинстве случаев идентификатор фронтальной камеры равен 1.

person Jorgesys    schedule 12.02.2020

Я использовал код из примера Google Camera2 API с некоторыми изменениями, чтобы заставить работать переднюю и заднюю камеры, включая локальное сохранение изображений и изменение формы TextureView с помощью наложения.

Я также имел дело с поворотом изображения с помощью интерфейса exif.

Кода довольно много, поэтому я опубликую ссылку на свой репозиторий GitHub:

https://github.com/craigspicer/Camera2API

https://nullparams.com/camera-2-api-tutorial/

person Craig    schedule 22.11.2019