Как запустить переднюю камеру с намерением?
Я использую намерение открыть камеру с помощью собственного приложения:
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);
Каждый раз, когда камера, которая открывается (передняя/задняя камера), как и в прошлый раз, была открыта. Это означает, что если в последний раз я закрыл приложение родной камеры, камера заднего вида была активна, поэтому, когда я запустил намерение камеры, задняя камера будет активна.
Я хочу запустить прямо переднюю камеру с намерением. Кто-нибудь знает, как это сделать?
Ответы
Ответ 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
при переключении на переднюю камеру в приложении собственной камеры? Если это действительно другая деятельность, то она будет отображаться как таковая, и вы можете просто скопировать намерение в свою заявку. Если он не появляется, вам не повезло, я думаю.