private SurfaceView imageSView; // private TextView countDownTextView; private TextView countDownTextView; private Camera camera; private SurfaceHolder surfaceHolder; private Handler timerUpdateHandler; private boolean timerRunning = false; private int currentTimer = 10;
imageSView.setZOrderMediaOverlay(true); surfaceHolder = imageSView.getHolder(); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceHolder.addCallback(this);
@Override public void onPictureTaken(byte[] data, Camera camera) { // TODO Auto-generated method stub String stuname= getIntent().getStringExtra("stuname"); String stuid= getIntent().getStringExtra("stuid"); String fileName=stuid+"-"+stuname; File outputImage; if (!new File(Environment.getExternalStorageDirectory()+"/idrmsapp/images_upload").exists()){ new File(Environment.getExternalStorageDirectory()+"/idrmsapp/images_upload").mkdir(); } if (new File(ConstantConfig.IMAGES_UPLOAD+fileName+"-"+(photoNameCount+1)+".png").exists()) { while (new File(ConstantConfig.IMAGES_UPLOAD + fileName + "-" + (photoNameCount + 1) + ".png").exists()) { photoNameCount++; } outputImage = new File(ConstantConfig.IMAGES_UPLOAD + fileName + "-" + (photoNameCount + 1) + ".png"); try { outputImage.createNewFile(); } catch (IOException e) { e.printStackTrace(); } imageUri = Uri.fromFile(outputImage); image=outputImage.toString(); }else { outputImage=new File(ConstantConfig.IMAGES_UPLOAD+fileName+"-"+(photoNameCount+1)+".png"); try { outputImage.createNewFile(); }catch (IOException e){ e.printStackTrace(); } imageUri= Uri.fromFile(outputImage); image=outputImage.toString(); } Uri imageFileUri = imageUri; try { OutputStream imageFileOS = getContentResolver().openOutputStream( imageFileUri); imageFileOS.write(data); imageFileOS.flush(); imageFileOS.close(); } catch (Exception e) { // TODO Auto-generated catch block Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } camera.startPreview(); showPicture(); }
private Runnable timerUpdateTask = new Runnable() { @Override public void run() { if (currentTimer==4){ initSufaceHolder(); isForTakingPhoto=true; showImage(false); showCountUi(true); } // TODO Auto-generated method stub if (currentTimer > 1&&photoCount<3) { currentTimer--; timerUpdateHandler.postDelayed(timerUpdateTask, 1000); } else { if (photoCount<3){ mCamera.stop(); faceDetectDismiss(true); camera.takePicture(null, null, null, TakePhotoActivity.this); timerRunning = false; currentTimer = 4; }else { Intent intent=new Intent(); intent.setClass(TakePhotoActivity.this,MainActivity.class); startActivity(intent); finish(); } } countDownTextView.setText(currentTimer + ""); } };
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub if (isForTakingPhoto) { camera.startPreview(); } } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub if (isForTakingPhoto) { int cameraNums = Camera.getNumberOfCameras(); Log.e(CAMERA_CONTROLL, cameraNums + ""); try { camera = Camera.open(cameraNums - 1); } catch (Exception e) { Log.e(CAMERA_CONTROLL, e.getMessage()); } try { camera.setPreviewDisplay(holder); Camera.Parameters parameters = camera.getParameters(); if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation", "portrait"); camera.setDisplayOrientation(180); parameters.setRotation(180); } List<String> colorEffects = parameters.getSupportedColorEffects(); Iterator<String> cei = colorEffects.iterator(); while (cei.hasNext()) { String currentEffect = cei.next(); if (currentEffect.equals(Camera.Parameters.EFFECT_SOLARIZE)) { parameters .setColorEffect(Camera.Parameters.EFFECT_SOLARIZE); break; } } camera.setParameters(parameters); } catch (Exception e) { // TODO Auto-generated catch block // e.printStackTrace(); camera.release(); } } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub if (isForTakingPhoto){ camera.stopPreview(); camera.release(); } }
timerUpdateHandler = new Handler(); if (!timerRunning) { timerRunning = true; timerUpdateHandler.post(timerUpdateTask); }