CameraActivity.java 6.75 KB
package com.metroapp.camera;

import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;

import com.cjt2325.cameralibrary.JCameraView;
import com.cjt2325.cameralibrary.listener.ClickListener;
import com.cjt2325.cameralibrary.listener.JCameraListener;
import com.metroapp.R;
import com.metroapp.bean.CameraDataBean;
import com.metroapp.utils.AliUploadFileService;

import org.greenrobot.eventbus.EventBus;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;


public class CameraActivity extends AppCompatActivity {

    private JCameraView jCameraView;
    private String cameraPath;
    private boolean fromRN;
    private static  final int RESULT_CODE = 15;
    private String passportId = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_camera);

        fromRN = getIntent().getBooleanExtra("fromRN",false);
        passportId = getIntent().getStringExtra("passportId");

        cameraPath = Environment.getExternalStorageDirectory()+"/com.metroapp/wx_video"; //照片/视频存放路径
        if (cameraPath ==null || cameraPath.equals("")){
            cameraPath = Environment.getExternalStorageDirectory().getPath() + File.separator + "JCamera";//设置默认路径
        }
        jCameraView = (JCameraView) findViewById(R.id.jcameraview);
        //设置视频保存路径
        jCameraView.setSaveVideoPath(cameraPath);
        jCameraView.setFeatures(JCameraView.BUTTON_STATE_BOTH);
        jCameraView.setTip("轻触拍照,长按摄像");
        jCameraView.setThemeColor(getResources().getColor(R.color.app_color));
        jCameraView.setMediaQuality(JCameraView.MEDIA_QUALITY_MIDDLE);
        jCameraView.setErrorLisenter(new com.cjt2325.cameralibrary.listener.ErrorListener() {
            @Override
            public void onError() {
                //错误监听

            }

            @Override
            public void AudioPermissionError() {
                Toast.makeText(CameraActivity.this, "请开启录音权限", Toast.LENGTH_SHORT).show();
            }
        });

        //JCameraView监听
        jCameraView.setJCameraLisenter(new JCameraListener() {
            @Override
            public void captureSuccess(Bitmap bitmap) {
                //获取图片bitmap
                String path =  saveBitmap(bitmap);
                System.out.println("====>captureSuccess"+path);
                uploadFile("IMAGE",path,passportId);
            }

            @Override
            public void recordSuccess(String url, Bitmap firstFrame) {
                //获取视频路径
//                uploadFile(url,true);
                uploadFile("VIDEO",url,passportId);
            }
        });

        jCameraView.setLeftClickListener(new ClickListener() {
            @Override
            public void onClick() {
                CameraActivity.this.finish();
            }
        });
        jCameraView.setRightClickListener(new ClickListener() {
            @Override
            public void onClick() {
                Toast.makeText(CameraActivity.this,"Right", Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    protected void onStart() {
        super.onStart();
        //全屏显示
        if (Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            //设置navigationbar 的颜色为透明
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        } else {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(option);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        jCameraView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        jCameraView.onPause();
    }


    public  String saveBitmap( Bitmap b) {
        long dataTake = System.currentTimeMillis();
        String jpegName = cameraPath + File.separator + "picture_" + dataTake + ".jpg";
        try {
            FileOutputStream fout = new FileOutputStream(jpegName);
            BufferedOutputStream bos = new BufferedOutputStream(fout);
            b.compress(Bitmap.CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();
            return jpegName;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }finally {
            b.recycle();	// 回收bitmap的内存
            b = null;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    public void uploadFile(final String type , final String url,String passportId){

        final AliUploadFileService aliUploadFileService = new AliUploadFileService(CameraActivity.this,true);
        aliUploadFileService.setListenerCallback(new AliUploadFileService.ActionCallbackListener<String>() {
            @Override
            public void onSuccess(final String data) {
                System.out.println("====>onSuccess"+data);
                CameraDataBean cameraDataBean = new CameraDataBean();
                cameraDataBean.setType(type);
                cameraDataBean.setUrl(data);
                if (fromRN){
                    EventBus.getDefault().post(cameraDataBean);
                }else {
                    Intent intent = new Intent();
                    intent.putExtra("cameraData",cameraDataBean);
                    setResult(RESULT_CODE,intent);
                }
                finish();
            }

            @Override
            public void onFailure(String errorCode, String message) {
                Toast.makeText(CameraActivity.this,message,Toast.LENGTH_SHORT).show();
            }
        });
        aliUploadFileService.uploadFile(url,passportId);

    }
}