public class FirstICActivity extends AppCompatActivity {    private static final String TAG = "TestCamera";    private Camera mCamera;    private CameraPreview mPreview;    private ImageView ivpic;    private FrameLayout cameraPreview;    public static Bitmap bitmap;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_first_ic);        checkpermission();        ivpic = findViewById(R.id.iv_pic);        cameraPreview = (FrameLayout) findViewById(R.id.camera_preview);        cameraPreview.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (mCamera != null) {                    Camera camera = mCamera;                    camera.cancelAutoFocus();                    Camera.Parameters parameters = camera.getParameters();                    parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);                    if (parameters.getMaxNumFocusAreas() > 0) {                        List mylist = new ArrayList();                        mylist.add(new Camera.Area(new Rect(-1000, -1000, 1000, 0), 750));                        parameters.setFocusAreas(mylist);                    }                    camera.setParameters(parameters);                    camera.autoFocus(new Camera.AutoFocusCallback() {                        @Override                        public void onAutoFocus(boolean success, Camera camera) {                            camera.cancelAutoFocus();                            Camera.Parameters params = camera.getParameters();                            if (params.getFocusMode().equals(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {                                params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);                                camera.setParameters(params);                            }                        }                    });                }                return true;            }        });    }    private void checkpermission() {        if (ContextCompat.checkSelfPermission(this,                Manifest.permission.CAMERA)                != PackageManager.PERMISSION_GRANTED) {            if (ActivityCompat.shouldShowRequestPermissionRationale(this,                    Manifest.permission.CAMERA)) {            } else {                ActivityCompat.requestPermissions(this,                        new String[]{Manifest.permission.CAMERA},                        1);            }        } else {            init();        }    }    @Override    public void onRequestPermissionsResult(int requestCode,                                           String permissions[], int[] grantResults) {        switch (requestCode) {            case 1: {                if (grantResults.length > 0                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {                    init();                } else {                    checkpermission();                }                return;            }        }    }    private void init() {        boolean hascamera = checkCameraHardware(this);        if (hascamera) {            Log.v(TAG, "HAS CAMERA");        } else {            Log.v(TAG, "NO CAMERA");        }        if (hascamera) {            // Create an instance of Camera            mCamera = getCameraInstance();            if (mCamera != null) {                // Create our Preview view and set it as the content of our activity.                mPreview = new CameraPreview(this, mCamera);                FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);                preview.addView(mPreview);            } else {                Log.v(TAG, "mCamera is null");            }        }    }    @Override    protected void onDestroy() {        mCamera.release();        super.onDestroy();    }    public void takepic(View v) {        if (mCamera != null) {            mCamera.takePicture(null, null, mPicture);        }    }    private Camera.PictureCallback mPicture = new Camera.PictureCallback() {        @Override        public void onPictureTaken(byte[] data, Camera camera) {            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);            ivpic = findViewById(R.id.iv_pic);            ivpic.setImageBitmap(bitmap);            mCamera.startPreview();        }    };    /**     * Check if this device has a camera     */    private boolean checkCameraHardware(Context context) {        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {            // this device has a camera            return true;        } else {            // no camera on this device            return false;        }    }    /**     * A safe way to get an instance of the Camera object.     */    public static Camera getCameraInstance() {        Camera c = null;        try {            c = Camera.open(); // attempt to get a Camera instance        } catch (Exception e) {            e.printStackTrace();            // Camera is not available (in use or does not exist)        }        return c; // returns null if camera is unavailable    }    public void icBack(View view) {        mCamera.stopPreview();        mCamera.release();        Intent intent = new Intent(FirstICActivity.this, SecondICActivity.class);        startActivity(intent);    }


去下一个 activity之前关闭camera

 mCamera.stopPreview();        mCamera.release();


Layout:


<?xml version="1.0" encoding="utf-8"?>                    





预览Preview activity :
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{    private static final String TAG = "TestCamera";    private SurfaceHolder mHolder;    private Camera mCamera;    public CameraPreview(Context context, Camera camera) {        super(context);        mCamera = camera;        // Install a SurfaceHolder.Callback so we get notified when the        // underlying surface is created and destroyed.        mHolder = getHolder();        mHolder.addCallback(this);        // deprecated setting, but required on Android versions prior to 3.0        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);    }    public void surfaceCreated(SurfaceHolder holder) {        // The Surface has been created, now tell the camera where to draw the preview.        try {            mCamera.setPreviewDisplay(holder);            mCamera.startPreview();        } catch (IOException e) {            Log.d(TAG, "Error setting camera preview: " + e.getMessage());        }    }    public void surfaceDestroyed(SurfaceHolder holder) {        // empty. Take care of releasing the Camera preview in your activity.    }    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {        // If your preview can change or rotate, take care of those events here.        // Make sure to stop the preview before resizing or reformatting it.        if (mHolder.getSurface() == null){            // preview surface does not exist            return;        }        // stop preview before making changes        try {            mCamera.stopPreview();        } catch (Exception e){            // ignore: tried to stop a non-existent preview        }        // set preview size and make any resize, rotate or        // reformatting changes here        // start preview with new settings        try {            mCamera.setPreviewDisplay(mHolder);            mCamera.startPreview();        } catch (Exception e){            Log.d(TAG, "Error starting camera preview: " + e.getMessage());        }    }


更多相关文章

  1. android camera2 api点击图片实现聚焦
  2. Android与服务器通信的方法之一-->TCP
  3. android 开发之Activity切换
  4. android软键盘开关
  5. Activity has leaked window that was originally added 问题解
  6. Android(安卓)关闭(删除)FM Transmitter功能的方法
  7. android入门级小软件身高体重计算器源代码,初学者可以看看~
  8. Android去掉自动获取焦点
  9. Android(安卓)studio 不能预览布局文件

随机推荐

  1. Android学习之路(1) -- APK签名
  2. Android L / 5.0 帮助文档 API21文档 sam
  3. Android 入门文档_Android 4.0后JNI所做
  4. Android(安卓)澶嶄範_Processes and Thre
  5. Android尺寸单位含义及相互换算
  6. Android 蓝牙编程之 Java socket编程
  7. Android Linker 与 SO 加壳技术
  8. 深入解析android log的分析方法(1)
  9. Android的持续化集成及多版本打包
  10. Android软件安全开发实践--收藏