2011-08-29 2 views
2

나는 안드로이드 응용 프로그램을 개발했습니다. 그게 내가 전면 카메라 기능을 직면했다. 잘 작동하지만 자동 캡처가 필요합니다. 클릭 셔터 버튼을 소리없이 즉, 나는안드로이드 폰에서 사진을 자동으로 캡처하는 방법은 무엇입니까?

카메라 활동 코드는 사전에

private Camera openFrontFacingCameraGingerbread() { 
    int cameraCount = 0; 
    Camera cam = null; 
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
    cameraCount = Camera.getNumberOfCameras(); 
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) { 
     Camera.getCameraInfo(camIdx, cameraInfo); 
     if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) { 
      try { 
       cam = Camera.open(camIdx); 
      } catch (RuntimeException e) { 
       Log.i("Camera failed to open: ",e.getLocalizedMessage()); 
      } 
     } 
    } 
    return cam; 
} 

감사합니다 ..

답변

5

입니다 .. photocode을 캡처 할 안드로이드 개발자 reference pages에 설명 된 단계에 따라 . '셔터 버튼'이 필요하지 않습니다. 화면에 이미지를 표시하지 않으려면 더미 SurfaceHolder를 만들 수 있습니다 (예 :

SurfaceView surface = new SurfaceView(context); 
cam.setPreviewDisplay(surface.getHolder()); 
+1

+1로 만들 .. – bluefalcon

+0

을 내가 어떤 클릭을 photo.without 캡처 할 또는 어떤 event.my 장치가 고정되어 하나의 area.first 그것은 QR 코드를 스캔하고 다음 사람 사진과 다음 프로세스 do.user 아무것도 할 수 없어 .. 나는 바코드 스캔 또는 QR 스캔과 같은 결과를 원한다 – Selva

+0

아마 내가 아니야 귀하의 문제를 이해하지만 takePicture()를 호출하고 callba를 전달해야합니다. cks (이미지 저장/조작 논리를 구현). – Glitch

0
public int intPicTaken; 


    // setPreviewCallback on the camera, wait intil intPicTaken increments to 10, then take the picture 
    cam.setPreviewCallback(prevCallBack); 

    public Camera.PreviewCallback prevCallBack = new Camera.PreviewCallback() { 
     @Override 
     public void onPreviewFrame(byte[] data, Camera camera) { 
      intPicTaken++; 
      try { 
       if(intPicTaken == 10) { 
       doTakePicture(); 
       } 
      } catch (Exception e) { 
       System.out.println("onPreviewFrame: " + e.toString()); 
      } 
     } 
    }; 

    public Camera.PictureCallback mPicture = new Camera.PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      System.out.println("PictureCallback onPictureTaken"); 
      try { 

       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inSampleSize = 1; 
       Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length, options); 
       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       picture.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
       baos.close(); 
       System.out.println("PictureCallback onPictureTaken done"); 
       cam.release(); 
       saveFile(picture); 
      } catch (Exception e) { 
       System.out.println("onPictureTaken: " + e.toString()); 
      } 
     } 
    }; 

    // take the picture 
    public void doTakePicture() { 
     try { 

      cam.stopPreview(); 
      cam.takePicture(null, null, mPicture, mPicture); 
     } catch(Exception e){ 
      System.out.println("doTakePicture: " + e.toString()); 
     } 
    } 

    // saving the file to gallery 
    public void saveFile(Bitmap bitmap) { 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     File mediaStorageDir = Environment.getExternalStorageDirectory(); 
     if (! mediaStorageDir.exists()){ 
      if (! mediaStorageDir.mkdirs()){ 
       System.out.println("saveFile: failed to create directory"); 
       return; 
      } 
     } 
     try { 
      String saved = MediaStore.Images.Media.insertImage(this.getContentResolver(), bitmap, "title", "description"); 
      Uri sdCardUri = Uri.parse("file://" + Environment.getExternalStorageDirectory()); 
      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, sdCardUri)); 
      System.out.println("file saved"); 
     } catch (Exception e) { 
      System.out.println("saveFile: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 
1

쓰기이 코드에서에 그것에 대해 알지 못했다 더미 sufaceholder에 대한 자동 캡처 이미지

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_custom__camera_activity); 
    mCamera = getCameraInstance(); 
    mCameraPreview = new CameraPreview(this, mCamera); 
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
    preview.addView(mCameraPreview); 


    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 

    { 



       mCamera.takePicture(null, null, mPicture); 

      } 


    } 
    }, 5500); 
    } 
관련 문제