Не получается использовать фронтальную камеру

Рейтинг: -1Ответов: 1Опубликовано: 14.03.2023
  • Задняя камера работает прекрасно как с фото, так и с видео, но вот на фронтальную (переднюю) никак не получается перейти.

  • С помощью: Camera.CameraInfo.CAMERA_FACING_FRONT; (как и другими способами) я определил, что фронтальной камере принадлежит индексация 1, а задней 0.

  • Манифест:

    uses-permission android:name="android.permission.CAMERA"

    uses-feature android:name="android.hardware.camera"

    Может существует какое-то специальное разрешение именно для фронтальной камеры? Хотя я пробовал и:

    uses-feature android:name="android.hardware.camera.front" android:required="false"

    Причём и с false и с true на всякий случай.

  • Импорт: import android.hardware.Camera; import android.hardware.Camera.Size;

  • Что я пробовал:

    1. camera = Camera.open(1);
    2. params.set("camera-id",1); где, естественно, пробовал различные варианты в кавычках, которые удалось найти в интернете. Другие способы мне тоже не помогли.
  • Ориентация изображения (что часто описывается при упоминании о фронтальной камере) меня сейчас волнует меньше всего. Камеры телефонов рабочие, тем более я пробовал на разных моделях. Если это имеет значение, то меня интересует только видеосъёмка на фронтальную камеру.

  • Ниже очень упрощённая часть моего рабочего(!) кода (без указания файлов, настроек и др.)

      public void VideoOn(){
      params = camera.getParameters();
      //Здесь идут настройки
      camera.setParameters(params);
      if (prepareVideoRecorder()) 
      {
      mediaRecorder.start();
      } 
      else {releaseMediaRecorder();
      }
      }
    
      public static boolean prepareVideoRecorder() {
      camera.stopPreview();
      camera.unlock();
      mediaRecorder = new MediaRecorder();
      mediaRecorder.setCamera(camera);
      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
      mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
      //Здесь идут настройки
      try {mediaRecorder.prepare();}
      catch (Exception e) {
          e.printStackTrace();
          releaseMediaRecorder();
          return false;}
      return true;
      }
    

Спасибо.

Ответы

▲ 0

С таким кодом у меня фронтальная камера заработала как часики. Код увидел у кого то на stackoverflow.

    public void openFrontFacingCamera() {

    int camId = Camera.CameraInfo.CAMERA_FACING_BACK;
    int numberOfCamera;

    numberOfCamera = Camera.getNumberOfCameras();
    if(camId == Camera.CameraInfo.CAMERA_FACING_BACK){
        camId = Camera.CameraInfo.CAMERA_FACING_FRONT;

        try {
            camera.release();
            camera = Camera.open(camId);
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();
           //previewing = true;
        } catch (RuntimeException e) {

        } catch (IOException e) {}
    }else if(camId == Camera.CameraInfo.CAMERA_FACING_FRONT){
        camId = Camera.CameraInfo.CAMERA_FACING_BACK;

        try {
            camera.release();
            camera = Camera.open(camId);
            camera.setPreviewDisplay(surfaceHolder);
            camera.startPreview();
        } catch (RuntimeException e) {

        } catch (IOException e) {}
    }
}