如何在android中使用前置摄像头[重复]

Posted

技术标签:

【中文标题】如何在android中使用前置摄像头[重复]【英文标题】:How to use Front Camera In android [duplicate] 【发布时间】:2014-10-16 07:29:01 【问题描述】:

我需要一些帮助我正在使用一个可以使用主摄像头在活动中自动拍照的应用程序但我想使用前置摄像头而不是主摄像头 你能告诉我如何使用前置摄像头

这是我的代码

public class TakePicture extends Activity implements SurfaceHolder.Callback

    //a variable to store a reference to the Image View at the main.xml file
    private ImageView iv_image;
    //a variable to store a reference to the Surface View at the main.xml file
    private SurfaceView sv;

    //a bitmap to display the captured image
    private Bitmap bmp;

    //Camera variables
    //a surface holder
    private SurfaceHolder sHolder;  
    //a variable to control the camera
    private Camera mCamera;
    //the camera parameters
    private Parameters parameters;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //get the Image View at the main.xml file
        iv_image = (ImageView) findViewById(R.id.imageView);

        //get the Surface View at the main.xml file
        sv = (SurfaceView) findViewById(R.id.surfaceView);

        //Get a surface
        sHolder = sv.getHolder();

        //add the callback interface methods defined below as the Surface View callbacks
        sHolder.addCallback(this);

        //tells android that this surface will have its data constantly replaced
        sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    

    @Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) 
    
         //get camera parameters
         parameters = mCamera.getParameters();

         //set camera parameters
         mCamera.setParameters(parameters);
         mCamera.startPreview();

         //sets what code should be executed after the picture is taken
         Camera.PictureCallback mCall = new Camera.PictureCallback() 
         
             @Override
             public void onPictureTaken(byte[] data, Camera camera) 
             
                 //decode the data obtained by the camera into a Bitmap
                 bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                 //set the iv_image

                 iv_image.setImageBitmap(bmp);
                 TakePicture t=new TakePicture();
                 t.SaveBitmap(bmp);
                // SendEmail(bmp);
             


         ;

         mCamera.takePicture(null, null, mCall);
    

    @Override
    public void surfaceCreated(SurfaceHolder holder) 
    
        // The Surface has been created, acquire the camera and tell it where
        // to draw the preview.
        mCamera = Camera.open();
        try 
           mCamera.setPreviewDisplay(holder);

         catch (IOException exception) 
            mCamera.release();
            mCamera = null;
        
    

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) 
    
        //stop the preview
        mCamera.stopPreview();
        //release the camera
        mCamera.release();
        //unbind the camera from this object
        mCamera = null;
    

【问题讨论】:

您也可以参考thanksandroid.com/android-custom-camera。 【参考方案1】:
public void openFrontFacingCamera() 
        numberOfCamera = Camera.getNumberOfCameras();
        if(camId == Camera.CameraInfo.CAMERA_FACING_BACK)
            camId = Camera.CameraInfo.CAMERA_FACING_FRONT;
            Toast.makeText(getApplicationContext(), "BACK TO FRONT" ,
1000).show();
                try 
                    camera.release();
                    camera = Camera.open(camId);
                    camera.setPreviewDisplay(surfaceHolder);
                    camera.startPreview();
                    previewing = true;
                 catch (RuntimeException e) 

             catch (IOException e) 
        else if(camId == Camera.CameraInfo.CAMERA_FACING_FRONT)
            camId = Camera.CameraInfo.CAMERA_FACING_BACK;
            Toast.makeText(getApplicationContext(), "FRONT TO BACK" , 



 1000).show();
                    try 
                        camera.release();
                        camera = Camera.open(camId);
                        camera.setPreviewDisplay(surfaceHolder);
                        camera.startPreview();
                     catch (RuntimeException e) 

             catch (IOException e) 
        
    

希望这个功能对你有帮助

【讨论】:

在我的代码中在哪里使用这个功能请告诉我 首先你需要全局创建相机对象然后在oncreate中调用这个函数【参考方案2】:

改变

mCamera = Camera.open();

mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);

【讨论】:

以上是关于如何在android中使用前置摄像头[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中使用Intent打开前置摄像头?

android Camera如何判断当前使用的摄像头是前置还是后置

如何检测android中是否有前置摄像头?

如何在android的webview中启用前置摄像头

opencv for android中使用照相机前置摄像头是照片是颠倒的?

android Camera 如何判断当前使用的摄像头是前置还是后置