/*
*
* CameraActivity.java
*
* Created by Wuwang on 2016/11/18
* Copyright © 2016年 深圳哎吖科技. All rights reserved.
*/
package com.aiyaapp.aiya.camera;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import android.Manifest;
import android.graphics.Bitmap;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Debug;
import android.support.annotation.NonNull;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.aiyaapp.aiya.EffectSelectActivity;
import com.aiyaapp.aiya.R;
import com.aiyaapp.aiya.util.PermissionUtils;
import com.aiyaapp.camera.sdk.base.FrameCallback;
import com.aiyaapp.camera.sdk.widget.CameraView;
/**
* Description:
*/
public class CameraActivity extends EffectSelectActivity implements FrameCallback{
private CameraView mCameraView;
private int bmpWidth=720,bmpHeight=1280;
private boolean isTakePhoto=true;
private boolean isRecord=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PermissionUtils.askPermission(this,new String[]{Manifest.permission.CAMERA,Manifest
.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_PHONE_STATE},10,mRunnable);
}
private CameraView.CameraController mController=new CameraView.CameraController(){
@Override
protected void otherSetting(Camera.Parameters param) {
super.otherSetting(param);
//不支持自动聚焦,这样设置会导致崩溃
//param.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
//设置FpsRange,应查询相机支持的fps range,然后再进行设置
//Android 提供了这个接口,但是这个设置不一定生效,与手机有关
//param.setPreviewFpsRange(30,30);
}
};
private Runnable mRunnable=new Runnable() {
@Override
public void run() {
setContentView(R.layout.activity_camera);
mCameraView = (CameraView)findViewById(R.id.mCameraView);
mCameraView.setCameraController(mController);
initData();
mCameraView.setEffect(null);
initCamera();
}
};
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionUtils.onRequestPermissionsResult(requestCode == 10, grantResults, mRunnable, new Runnable() {
@Override
public void run() {
finish();
Toast.makeText(CameraActivity.this,"必要的权限未被允许",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.camera,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.mSwitchCamera:
mCameraView.switchCamera();
break;
}
return super.onOptionsItemSelected(item);
}
//对CameraView的设置
private void initCamera(){
mCameraView.setFrameCallback(bmpWidth,bmpHeight,this);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(mCameraView!=null){
mCameraView.onResume();
}
// mCameraView.bringToFront();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(mCameraView!=null){
mCameraView.onPause();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mCameraView!=null){
mCameraView.onDestroy();
}
}
@Override
public void onClick(View view){
super.onClick(view);
switch (view.getId()){
case R.id.mShutter:
if(isTakePhoto){
mCameraView.takePhoto();
}else{
// isRecord=!isRecord;
// if(isRecord){
// mCameraView.setFrameCallback(360,648,this);
// mCameraView.startRecord();
// if(mEncoder==null){
// mEncoder=new CameraEncoder();
// }
// mEncoder.setSavePath(getVideoPath(System.currentTimeMillis()+".mp4"));
// try {
// mEncoder.prepare(360,640);
// mEncoder.start();
// } catch (IOException | InterruptedException e) {
// e.printStackTrace();
// }
// }else{
// mCameraView.stopRecord();
// mEncoder.stop();
// }
}
break;
}
}
//拍照或者录制的回调
@Override
public void onFrame(final byte[] bytes,long time) {
if(isTakePhoto){
saveBitmapAsync(bytes,bmpWidth,bmpHeight);
}else{
// mEncoder.feedData(bytes,time);
}
}
private String getVideoPath(String path){
String p=getSD()+"/AiyaCamera/video/";
File f=new File(p);
if((!f.exists()||!f.isDirectory())&&f.mkdirs()){
android.util.Log.e("wuwang","mkdirs->"+p);
}
return p+path;
}
}