Как запустить переднюю камеру с намерением?

Я использую намерение открыть камеру с помощью собственного приложения:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri photoUri = Uri.fromFile(getOutputPhotoFile()); intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); startActivityForResult(intent, CAMERA_PHOTO_REQUEST_CODE); 

Каждый раз, когда камера, открытая (передняя / задняя камера), как и в прошлый раз, была открыта. Это означает, что если в последний раз я закрыл приложение для родной камеры, задняя камера была активной, поэтому, когда я запускаю намерение камеры, задняя камера будет активна.

Я хочу запустить прямо переднюю камеру с намерением. Кто-нибудь знает, как это сделать?

Solutions Collecting From Web of "Как запустить переднюю камеру с намерением?"

Осторожно: его взломать

Добавьте это к намерению

 intent.putExtra("android.intent.extras.CAMERA_FACING", 1); 

Это решение не является устойчивым, оно использует тестовый код приложения «Камера». Для получения дополнительной информации смотрите статический метод getCameraFacingIntentExtras в классе Util проекта AOSP Camera.

Обновление: похоже, что он отключен в L

Взятый из ярлыка Google Camera для Android 7.1 (но должен работать со старыми андроидами)

 intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true); 

Таким образом, в сочетании с предыдущими ответами, это работает для меня на всех телефонах, на которых я мог бы проверить его на

 intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1); intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true); 

Нет никакого намерения (AFAIK), специально предназначенного для фронтальной камеры.

Для этого программно: Android SDK <= 2.2 поддерживает только одну камеру (первую обратную камеру). Для 2.3+ вы можете зацикливаться на камерах и выяснить, какая из них фронтальная (если есть). Это будет что-то вроде …

 Camera cam = null; Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); for (int camNo = 0; camNo < Camera.getNumberOfCameras(); camNo++) { CameraInfo camInfo = new CameraInfo(); Camera.getCameraInfo(camNo, camInfo); if (camInfo.facing.equals(Camera.CameraInfo.CAMERA_FACING_FRONT)) { cam = Camera.open(camNo); } } if (cam == null) { // no front-facing camera, use the first back-facing camera instead. // you may instead wish to inform the user of an error here... cam = Camera.open(); } // ... do stuff with Camera cam ... 

Этот пример является только скелетом и не обеспечивает никакой (очень необходимой) обработки ошибок.

EDIT: вам также нужно добавить их в свой манифест:

 <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.front" android:required="false" /> 

Вы пробовали смотреть adb logcat при переключении на переднюю камеру в своем приложении с собственной камерой? Если это действительно другая деятельность, то она будет отображаться как таковая, и вы можете просто скопировать намерение в свою заявку. Если он не появится, вам не повезло, я думаю.

Попробуй это:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1); } else { intent.putExtra("android.intent.extras.CAMERA_FACING", 1); }