如何在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 Camera如何判断当前使用的摄像头是前置还是后置