Shivansh
Shivansh

Reputation: 906

android camera click continous shots

I am trying to make camera application which takes 3 continuous shots.

i have tried to call "takePicture" several times by putting it in a loop.

but no success.

please help on this matter.

a little help will be appreciated.

Upvotes: 2

Views: 2113

Answers (3)

Shivansh
Shivansh

Reputation: 906

I got the solution.

i was calling mCamera.startPreview(); out of my loop.

preview is must to take shots, and not including mCamera.startPreview(); was blocking my execution.

Upvotes: 0

bofredo
bofredo

Reputation: 2348

I use it like this when doing a PhotoBurst. It is also handling the FRameLayout holding the preview to start the PhotoBurst:

PictureCallback jpegCallback = new PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {
        FileOutputStream outStream = null;
        try {

            Parameters param = camera.getParameters();
            param.setPictureSize(640, 480);
            camera.setParameters(param);

             // Or write to sdcard
            outStream = new FileOutputStream(String.format(
                    Environment.getExternalStorageDirectory().getPath()+"/foto%d.jpg",
                    System.currentTimeMillis()));

            outStream.write(data);
            outStream.close();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,                           
                     Uri.fromFile(Environment.getExternalStorageDirectory())));

            Log.i(TAG, "onPictureTaken - wrote bytes: " + data.length);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
        Log.d(TAG, "onPictureTaken - jpg");
        try {
            stillCount++;
            camera.startPreview();
            if (stillCount < 10) {
                preview.mCamera.takePicture(shutterCallback, rawCallback,
                        jpegCallback);
                if (stillCount == 9) {
                    frameLayout.setClickable(true);
                }
            } else {
                stillCount = 0;
                takePictureButton.setEnabled(true);
                frameLayout.setClickable(true);
            }
        } catch (Exception e) {
            Log.d(TAG, "Error starting preview: " + e.toString());
        }
    }
};  

Upvotes: 0

Alex Cohn
Alex Cohn

Reputation: 57203

You never should call PictureCallback.onPictureTaken() from your code; this callback receives data from the system when it is ready, as response to Camera.takePicture().

The latter call will only succeed if the camera is opened and preview is started. Therefore, simply calling Camera.takePicture() in a loop will not work (see e.g. Android 2.3.1 Camera takePicture() Multiple images with one button click). The correct way to handle this is to keep a counter of shots processed in your onPictureTaken(), and if it is less than 3, then restart camera preview and issue (synchroneously) another Camera.takePicture(). After this, onPictureTaken() should return, to allow processing of the next captured frame.

Upvotes: 3

Related Questions