@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_custom__camera );
//Flash
hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature( PackageManager.FEATURE_CAMERA_FLASH);
if (!hasFlash) {
// device doesn't support flash
// Show alert message and close the application
AlertDialog alert = new AlertDialog.Builder(Custom_CameraActivity.this)
.create();
alert.setTitle("Error");
alert.setMessage("Sorry, your device doesn't support flash light!");
alert.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// closing the application
finish();
}
});
alert.show();
return;
}
getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
context = this;
mCamera = Camera.open();
mCamera.setDisplayOrientation( 90 );
camerapreview = (LinearLayout) findViewById( R.id.camera_preview );
mCameraPreview = new CameraPreview( context, mCamera );
camerapreview.addView( mCameraPreview );
capture = (ImageButton) findViewById( R.id.button_capture );
capture.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture( null, null, mPicture );
}
} );
switchCamera = (ImageButton) findViewById(R.id.btnSwitch);
switchCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//get the number of cameras
int camerasNumber = Camera.getNumberOfCameras();
if (camerasNumber > 1) {
//release the old camera instance
//switch camera, from the front and the back and vice versa
releaseCamera();
chooseCamera();
} else {
}
}
});
flash= (ImageButton)findViewById( R.id.bulb ) ;
flash.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isFlashOn){
turnOffFlash();
}else{
turnOnFlash();
}
}
} );
mCamera.startPreview();
//initializeCamera();
}
private void turnOnFlash() {
if (isFlashOn) {
if (mCamera != null || params != null) {
return;
}
params = mCamera.getParameters();
params.setFlashMode( Camera.Parameters.FLASH_MODE_OFF);
mCamera.setParameters(params);
mCamera.stopPreview();
isFlashOn = false;
}
}
private void turnOffFlash() {
if(!isFlashOn) {
if (mCamera == null || params == null) {
return;
}
params = mCamera.getParameters();
((Camera.Parameters) params).setFlashMode( Camera.Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(params);
mCamera.startPreview();
isFlashOn = true;
}
}
private void initializeCamera() {
int cameraId= findBackFacingCamera();
if(cameraId >= 0){
mCamera= Camera.open(cameraId);
mCamera.setDisplayOrientation( 180 );
mPicture=getPictureCallBack();
mCameraPreview.refreshCamera( mCamera );
}
}
private int findFrontFacingCamera() {
int cameraId = -1;
// Search for the front facing camera
int numberOfCameras = Camera.getNumberOfCameras();
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
cameraId = i;
cameraBack = false;
break;
}
}
return cameraId;
}
private int findBackFacingCamera() {
int cameraId = -1;
//Search for the back facing camera
//get the number of cameras
int numberOfCameras = Camera.getNumberOfCameras();
//for every camera check
for (int i = 0; i < numberOfCameras; i++) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
cameraId = i;
cameraBack = true;
break;
}
}
return cameraId;
}
@Override
protected void onResume() {
super.onResume();
if(mCamera== null){
mCamera = Camera.open();
mCamera.setDisplayOrientation( 90 );
mPicture= getPictureCallBack();
mCameraPreview.refreshCamera(mCamera);
Log.d("nu","null");
}else{
Log.d("nu","no null");
}
}
public void chooseCamera() {
//if the camera preview is the front
if (cameraBack) {
int cameraId = findFrontFacingCamera();
if (cameraId >= 0) {
//open the backFacingCamera
//set a picture callback
//refresh the preview
mCamera = Camera.open(cameraId);
mCamera.setDisplayOrientation(90);
mPicture = getPictureCallBack();
mCameraPreview.refreshCamera(mCamera);
}
} else {
int cameraId = findBackFacingCamera();
if (cameraId >= 0) {
//open the backFacingCamera
//set a picture callback
//refresh the preview
mCamera = Camera.open(cameraId);
mCamera.setDisplayOrientation(90);
mPicture = getPictureCallBack();
mCameraPreview.refreshCamera(mCamera);
}
}
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
private void releaseCamera() {
if(mCamera != null){
mCamera.stopPreview();
mCamera.setPreviewCallback( null );
mCamera.release();
mCamera= null;
}
}
private Camera.PictureCallback getPictureCallBack() {
Camera.PictureCallback picture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
bitmap = BitmapFactory.decodeByteArray( data,0,data.length );
Intent intent= new Intent(Custom_CameraActivity.this,Display.class);
startActivity( intent );
}
};
return picture;
}
}