2011-08-29 65 views
2

我開發了一個android應用程序。在那我已經使用了前置攝像頭功能。它的工作正常,但我需要自動捕獲。即沒有點擊快門按鈕的聲音,我想捕捉photocode ..如何在android手機中自動捕捉照片?

相機活動代碼是提前

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

按照Android開發者reference pages列出的步驟。沒有要求有'快門按鈕'。如果您不想在屏幕上顯示圖像,可以創建一個虛擬SurfaceHolder,例如

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

+1假人sufaceholder,不知道的.. – 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

寫這段代碼在創建自動捕獲圖像

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); 
    }