Не получается использовать фронтальную камеру
Задняя камера работает прекрасно как с фото, так и с видео, но вот на фронтальную (переднюю) никак не получается перейти.
С помощью: 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;
Что я пробовал:
- camera = Camera.open(1);
- 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; }
Спасибо.
Ответы (1 шт):
С таким кодом у меня фронтальная камера заработала как часики. Код увидел у кого то на 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) {}
}
}