android camera2

package com.example.administrator.testdemo.camera;

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.graphics.Camera;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.media.ImageReader;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

import com.example.administrator.testdemo.Log.LogShow;
import com.example.administrator.testdemo.R;

import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.ViewById;

import java.util.ArrayList;
import java.util.Arrays;


@EActivity(R.layout.cameramain)
public class MyCamera extends Activity {

    @AfterViews
    public void afterView() {
     LogShow.logShow("finich");
        surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                initCamera2();
            }

            

            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

            }

            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {

            }
        });
    }
private Handler  childHandle;
private Handler  mainHanlde;
    private ImageReader imagereader;
    private void initCamera2() {
        HandlerThread han=new HandlerThread("Camera2");
        han.start();
         childHandle =new Handler(han.getLooper());
        mainHanlde=new Handler(getMainLooper());
        imagereader=ImageReader.newInstance(1080,1920, ImageFormat.JPEG,1);
        imagereader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
            @Override
            public void onImageAvailable(ImageReader reader) {
                     /*mCameraDevice.close();
                  surfaceView.setVisibility(View.GONE);*/
            }
        },mainHanlde);
        CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
        try {
            String[] cameraIdList = cameraManager.getCameraIdList();
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

                return;
            }
            cameraManager.openCamera(cameraIdList[0], stateCallback,mainHanlde);



        } catch (CameraAccessException e) {
            e.printStackTrace();
        }
    }

    @ViewById(R.id.surfaceView)
    SurfaceView  surfaceView;
    @Click(R.id.onclick)
    public void onclicka() {
        LogShow.logShow("onclicka");

    }
private CameraDevice mCameraDevice;
    CameraDevice.StateCallback  stateCallback =new CameraDevice.StateCallback() {
        @Override
        public void onOpened(@NonNull CameraDevice camera) {
            mCameraDevice=camera;
           takePreview();
        }

        @Override
        public void onDisconnected(@NonNull CameraDevice camera) {
             if (mCameraDevice!=null){
                 mCameraDevice.close();
                 mCameraDevice=null;
             }
        }

        @Override
        public void onError(@NonNull CameraDevice camera, int error) {
           LogShow.logShow("error");
        }
    };
    private Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            LogShow.logShow(msg.toString());
        }
    };


     CameraCaptureSession mCameraCaptureSession ;
private void takePreview(){
    try {
        final CaptureRequest.Builder capture=mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
        capture.addTarget(surfaceView.getHolder().getSurface());
         mCameraDevice.createCaptureSession(Arrays.asList(surfaceView.getHolder().getSurface(), imagereader.getSurface()), new CameraCaptureSession.StateCallback() {
             @Override
             public void onConfigured(@NonNull CameraCaptureSession session) {
              if (mCameraDevice==null){
                  return;
              }
                 mCameraCaptureSession=session;

                 try {
                     capture.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
                     // 打开闪光灯
                     capture.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);
                     // 显示预览
                     CaptureRequest previewRequest = capture.build();
                     mCameraCaptureSession.setRepeatingRequest(previewRequest, null, childHandle);
                 } catch (CameraAccessException e) {
                     e.printStackTrace();
                 }


             }

             @Override
             public void onConfigureFailed(@NonNull CameraCaptureSession session) {

             }
         },childHandle);
    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值