Как запустить фронтальную камеру с намерением? - PullRequest
32 голосов
/ 13 марта 2012

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

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

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

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

Ответы [ 6 ]

35 голосов
/ 22 июня 2012

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

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

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

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

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

8 голосов
/ 21 октября 2016

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

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 голосов
/ 13 марта 2012

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

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

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 ...

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

РЕДАКТИРОВАТЬ: Вам также необходимо добавить этина ваш манифест:

<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" />
0 голосов
/ 21 июня 2019
    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 
0 голосов
/ 11 октября 2016

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

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);
}
0 голосов
/ 13 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...