实现android 前后摄像头切换效果
16lz
2021-01-26
近期公司要搞摄像头测试,就专心在网上找资料,可是网上的资料很多都是只有一些简单的介绍,今天我就整理好,希望可以帮助一下有需要的朋友!!
1、首先的在清单AndroidManifest.xml中添加一下权限:
2、贴出代码
package com.camera.ui;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Matrix;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.os.Bundle;import android.os.Environment;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.widget.Toast;public class CameraActivity extends Activity {private SurfaceView mSurfaceView;private SurfaceHolder mHolder;private Camera mCamera;Boolean mBoolean=false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera);initSurface(); new Thread(new Runnable() {@Overridepublic void run() {initCamera();}}).start();}private void initSurface(){mSurfaceView = (SurfaceView) findViewById(R.id.camera_surfaceview);mHolder = mSurfaceView.getHolder();mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}private void initCamera() {if(checkCameraHardware(getApplicationContext())){openFacingCamera();autoFocus();}}private void autoFocus() {try {//Because open camera takes time, let the thread to sleep hereThread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}mCamera.autoFocus(mAutoFocus);mCamera.takePicture(null, null, mPicCallback);}private boolean checkCameraHardware(Context context) {if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){return true;} else {return false;} }private Boolean openFacingCamera() {//Open a front-facing cameraCamera.CameraInfo cameraInfo = new Camera.CameraInfo();if(!mBoolean){for (int camIdx = 0, cameraCount = Camera.getNumberOfCameras(); camIdx < cameraCount; camIdx++) {Camera.getCameraInfo(camIdx, cameraInfo);if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {mCamera = Camera.open(camIdx);mBoolean =true;}} }else if(mBoolean){//Open the rear camerafor (int camIdx = 0, cameraCount = Camera.getNumberOfCameras(); camIdx < cameraCount; camIdx++) {Camera.getCameraInfo(camIdx, cameraInfo);if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {try { mCamera = Camera.open(camIdx);mBoolean =false;} catch (RuntimeException e) {e.printStackTrace();return false;}}}}try { mCamera.setPreviewDisplay(mHolder);} catch (IOException e) {e.printStackTrace();mCamera.stopPreview();mCamera.release();mCamera = null;return false;} mCamera.startPreview();return true;}private AutoFocusCallback mAutoFocus = new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {}};private PictureCallback mPicCallback = new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {//Will get 270 photos of rotation, so that it is verticalBitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);Matrix mMatrix = new Matrix();mMatrix.preRotate(270);mBitmap = Bitmap.createBitmap(mBitmap ,0,0, mBitmap .getWidth(), mBitmap .getHeight(),mMatrix,true);File mFile = new File(getDir(), "CameraTest.jpg");try {FileOutputStream mFileOutputStream = new FileOutputStream(mFile);mBitmap.compress(Bitmap.CompressFormat.PNG, 100, mFileOutputStream);mFileOutputStream.close();} catch (Exception error) {Toast.makeText(CameraActivity.this, "Pictures failed", Toast.LENGTH_SHORT).show();;error.printStackTrace();mCamera.stopPreview();mCamera.release();mCamera = null;}Toast.makeText(CameraActivity.this, "To get photos success", Toast.LENGTH_SHORT).show();;mCamera.stopPreview();mCamera.release();mCamera = null;initCamera();}};private File getDir(){File mDir = Environment.getExternalStorageDirectory();if (mDir.exists()) {return mDir;} else {mDir.mkdirs();return mDir;}}}
3、还有就是简单的main.xml
4、参考了一些厉害的博客,自己也在学习积累。
例如:http://blog.csdn.net/bill_ming/article/details/7730305
更多相关文章
- Android开发者指南-摄像头-Camera
- Android(安卓)蓝牙 资料(转)
- Android(安卓)Studio 2.3.2 下载 - 百度网盘
- Android(安卓)Camera2.0 结合ImageReader拍照并解决图片偏转问题
- Android—实现自定义相机倒计时拍照
- Android(安卓)JNI(JNI(JAVA同C++配合使用)
- Android摄像头开发:实时摄像头视频预览帧的编码问题(二)
- 【Android】【opencv】实现摄像头拍照和录像
- Android(安卓)surfaceview 自定义相机 拍照(闪光灯、前后摄像头)