如题. 需要直接调用原生相机的前置摄像头, 而不是通过自定义的方式. 
网上有两种方式 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1);
// 调用前置摄像头
startActivityForResult(intent, 1);和Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);这两种方法依然打开的是后置的摄像头. 里边的参数不管换成0, 1, 2 都不好使. 求指点, 急求!

解决方案 »

  1.   

      Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
            int cameraCount = Camera.getNumberOfCameras();
            for(int camIdx = 0;camIdx<cameraCount;camIdx++){
                Camera.getCameraInfo(camIdx,cameraInfo);
                if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
                    mCamera = Camera.open(camIdx);
                }
            }
      

  2.   

    改一句代码就可以了,如下:
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra("android.intent.extras.CAMERA_FACING", 1); // 调用前置摄像头
    intent.putExtra("autofocus", true); // 自动对焦
    intent.putExtra("fullScreen", false); // 全屏
    intent.putExtra("showActionIcons", false);
    startActivityForResult(intent, 1);
      

  3.   


    你好. 这个方法试过了, 但是执行Camera.open(camldx)之后, 没有任何反应, LOG日志里也没报任何错误. 有什么想法儿吗?
      

  4.   

    你的这句:intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1);
    我的这句:intent.putExtra("android.intent.extras.CAMERA_FACING", 1);望楼主试试,别看错了
      

  5.   


    还有. 用我这种方法写的话, 是调的原生的相机吧? 如果是的话, 那么不需要使用surfaceview之类的吧? int cameraCount = 0;
    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) {
    if(camera != null) {
    camera.release();
    camera = null;
    }
    try {
    camera = Camera.open(camIdx);
    } catch (RuntimeException e) {
    e.getLocalizedMessage();
    }
    }
    }但是现在就是open方法也执行了, 相机就是没有打开. 求各位指点!
      

  6.   

    方便留个邮箱么,我把我这个Demo发你,还有就是我用的是小米4S,不知道楼主用得哪个牌子的手机测试??
      

  7.   

    我用了个android 7.0的华为手机,果然不行,我再调试看看,整理好了回复你
      

  8.   

    这几天太忙,都没时间看你的问题。我觉得和手机android的版本也有一定的关系,我那个可行的手机是android 5.1.1的
      

  9.   

    调用系统的方法始终还是有些问题,我网上查看了一些别的方法,和一楼的处理方式一样。我把我这边的DEMO发到你的163的邮箱里面喽,你看看喃
      

  10.   

    谢谢啦!我看了下。 
    不过, 难道只能通过自定义的方式吗? 郁闷了。 自定义的我老是设置不好前置摄像头的宽高比。 你看你给我发的那个是图样有点压扁了, 我之前自定义过一个,是头像拉长了。
    我这里倒是有一个自定义的DEMO,别人写的, 它的前置摄像头倒是比例正常。要不您抽空给看一下? 它封装的太到位, 我看着太费劲,有点缕不过来………………
    您留个邮箱QQ啥的我发你, 可以呗?
      

  11.   

    老铁,这个问题很诡异,但是看了看相机的源码之后你会发现,你设置自动对焦了,收到自动对焦的Intent后,相机会过滤支持对焦的摄像头,然而你的前置摄像头不支持自动对焦,所以怎么设置都是后置,去掉那句就行了
    上一种方法在新的SDK中被弃用了
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra("camerasensortype", 2); // 调用前置摄像头
    //intent.putExtra("autofocus", true); // 自动对焦  去掉这句吧
    intent.putExtra("fullScreen", false); // 全屏
    intent.putExtra("showActionIcons", false);
    startActivityForResult(intent, 1);再试下?
      

  12.   


    感谢大神支招!
    用两部手机亲测了下, 注掉自动对焦那一行, 调出来的依然是后置摄像头。而且LOG里也没报什么错。真心无奈了。
      

  13.   

    现在的同学,学习Android,都不是很系统。
    可以阅读一下官方文档:https://developer.android.com/reference/android/hardware/Camera.html
    虽然Camera在API 21已经废弃,但是还是可以查询的到,目前大多数项目应该也是用的1楼的方法。
    随便写了下,贴一下代码吧。
    final SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
            findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int numCameras = Camera.getNumberOfCameras();
                    if (numCameras == 0) {
                        return;
                    }                Camera.CameraInfo selectedCameraInfo = null;
                    int index;
                    index = 0;
                    while (index < numCameras) {
                        Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
                        Camera.getCameraInfo(index, cameraInfo);
                        if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                            selectedCameraInfo = cameraInfo;
                            break;
                        }
                        index++;
                    }                Camera camera;
                    if (index < numCameras) {
                        camera = Camera.open(index);
                    } else {
                        camera = Camera.open(0);
                        selectedCameraInfo = new Camera.CameraInfo();
                        Camera.getCameraInfo(0, selectedCameraInfo);
                    }                if (camera == null) {
                        return ;
                    } else {
                        try {
                            camera.setPreviewDisplay(surfaceView.getHolder());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        camera.startPreview();
                    }
                }
            });
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!" />    <Button
            android:id="@+id/button1"
            android:layout_gravity="center_horizontal"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="打开摄像头"/>    <SurfaceView
            android:id="@+id/surfaceview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" /></LinearLayout>
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-feature android:name="android.hardware.camera" />
     <uses-feature android:name="android.hardware.camera.autofocus" />希望能帮助你们~
      

  14.   

    @perry_du 你这个是调用系统相机么。。
      

  15.   

    谢谢各位的关注和帮忙. 在这里统一回复下.
    最后依然没有找到能直接调用系统前置摄像头的方法.
    最后还是自己自定义了一个相机. 
    关于自定义相机,  网上应该有差不多的DEMO,这里就不码代码了.
    谢谢各位!
      

  16.   

    我也遇到这个问题,Android8.0 会有这个问题,系统相机开的哪个摄像头,你就吊哪个摄像头,亲测,如果产品非要前置,直接重写个相机吧