Nguyen Hoai Thanh
Nguyen Hoai Thanh

Reputation: 359

Can't take picture in android

I'm trying to take a picture in Android using the code below. The current code doesn't work, namely i cant find the picture inside my phone's storage.

public class CameraShooting implements SurfaceHolder.Callback {

    Context context;
    Camera camera;
    CameraInfo camerainfo;
    Camera.Parameters paras;
    SurfaceView surfaceview;
    SurfaceHolder surfaceholder;
    PictureCallback picturecallback;
    SurfaceHolder.Callback callback = (SurfaceHolder.Callback) this;

    public CameraShooting(Context context) {

        this.context = context;
        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
            surfaceview = new SurfaceView(context);

            surfaceholder = surfaceview.getHolder();
            surfaceholder.addCallback(callback);

        }

    };

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        int numbersofCamera = camera.getNumberOfCameras();
        camerainfo = new CameraInfo();
        /*
         * for(int i =0; i < numbersofCamera; i++){ Camera.getCameraInfo(i,
         * camerainfo); if (camerainfo.facing ==
         * CameraInfo.CAMERA_FACING_FRONT){ camera.open(i); }}
         */

        camera.open(0);
        try {
            camera.setPreviewDisplay(surfaceholder);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        camera.startPreview();
        camera.takePicture(null, null, mPicture);
        Toast.makeText(context, "Picture taken", Toast.LENGTH_SHORT).show();
    };

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    private PictureCallback mPicture = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {

            File pictureFile = new File(Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_DOWNLOADS
                    ), "picture taken");
            try {
                OutputStream fos = new BufferedOutputStream(new FileOutputStream(pictureFile));
                fos.write(data);
                fos.close();
            } catch (FileNotFoundException e) {

            } catch (IOException e) {

            }
        };
    };

}

Note, I already included

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Upvotes: 0

Views: 153

Answers (1)

ChuongPham
ChuongPham

Reputation: 4801

Try:

fos.flush();

before you close the OutputStream.

Upvotes: 1

Related Questions