Подтвердить что ты не робот

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

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

    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);

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

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

4b9b3361

Ответ 1

Слово предостережения: это взломать

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

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

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

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

Ответ 2

Взято из ярлыка 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);

Ответ 3

Нет никакого намерения (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" />

Ответ 4

Попробуйте следующее:

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);
}

Ответ 5

    pictureIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
    pictureIntent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
    pictureIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
working on intex 

Ответ 6

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