如何在安卓系统中使用Intent打开前置摄像头?

11

我想制作一个应用程序,在该应用程序中我只需要打开前置摄像头,我如何使用 intent 实现这一点?

private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

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

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}

你能否发布打开前置摄像头的完整解决方案? - Anshul Tyagi
3个回答

16

Java

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Uri photoUri = Uri.fromFile(getOutputPhotoFile());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
    intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
    startActivityForResult(intent, CAMERA_PHOTO_REQUEST_CODE);

其他/备选解决方案

private Camera openFrontFacingCameraGingerbread() {
    int cameraCount = 0;
    Camera cam = null;
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
    cameraCount = Camera.getNumberOfCameras();
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
        Camera.getCameraInfo(camIdx, cameraInfo);
        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
            try {
                cam = Camera.open(camIdx);
            } catch (RuntimeException e) {
                Log.e(TAG, "Camera failed to open: " + e.toString());
            }
        }
    }

    return cam;
}

请在AndroidManifest.xml文件中添加这些权限。

<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" />

仅适用于Gingerbread(2.3)及以上的Android版本。

否则您也可以查看这些示例

1. android-Camera2Basic

2. Camera Example 2

3. Vogella example

希望能帮到您。


1
我使用相机API打开前置摄像头,但在拍摄图像后,它会将图像顺时针旋转90度后保存。我该如何正确保存图像? - Abhishek Joshi
也许这个答案可以帮到你。 - skydroid

4
注意:您正在尝试正确使用Intent(还请注意下面的@skydroid答案)。但是,它可能无法正常工作,因为以下原因:
标准Android相机
使用Intent只会打开标准Android相机应用程序(那里默认为后置摄像头)。 永远不要使用android.intent.extras.CAMERA_FACING属性-这是一项未经记录的功能,从某些Android版本开始已经停止工作
相机API
要打开前置摄像头,您应该使用相机API - 做一些像选择前置摄像头,在视图中显示预览并手动拍照的事情。 @skydroid的答案显示了如何找到前置摄像头。请注意,Camera.open()不会像您期望的那样为用户打开相机,您应该手动显示预览。

还要注意的是,自从API level 21之后,相机API已经被弃用,文档建议使用Camera 2 API。但是相机API仍然完全可用,如果您需要支持旧版本(< API level 21),则没有其他选择。


2
问题仍然存在:“如何在Android中使用Intent打开前置摄像头?” - ekashking
@ekashking,作者和下面的“skydroid”已经展示了使用Intent的正确方法。我只是指出,使用Intent进行前置摄像头拍照“是一个未记录的功能,从某些Android版本开始停止工作”,因此不建议使用它(也许这就是为什么对于作者它不起作用的原因)。作为替代方案,我提到了Camera API是首选选项(如果作者不知道的话),并指向了“skydroid”的答案,因为他已经很好地描述了Camera API(以及Intent)的使用方法。P.S.请注意,这个答案已经有5年了,现在可能已经发生了变化。 - Artem Novikov

3
try this:

 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
                File outPutFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Util.SD_CARD_PATH);
                if (!outPutFile.exists()) {
                    outPutFile.mkdirs();
                }
                capturedImageUri = Uri.fromFile(File.createTempFile("packagename" + System.currentTimeMillis(), ".jpg", outPutFile));

                intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageUri);
                startActivityForResult(intent, Util.REQUEST_CAMERA);

捕获的图像URI是什么? - Abhishek Joshi
它与您的文件URI相同。它将在该URI中存储所点击的图像。 - Jinal Patel
这是我的SD卡路径..你可以选择将其存储在你希望的地方。 - Jinal Patel
什么是Util.?请帮帮我。 - Abhishek Joshi
将"that"替换为"/urappname"。util是我的自定义类。 - Jinal Patel
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接