0

SOLVED, SEE COMMENT --- I never get a callback from Camera.takePicture(), I see that in logcat. What is missing? How do I make takePicture()... take a picture?! Most of this is directly from Android developers camera guide. I want to take pictures programmatically without any preview or user action. Using the built in camera app works fine. SDK 16.

And in the manifest I do have added:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera"
android:required="true" />

The code:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button bTake =  (Button)findViewById(R.id.b_take);
    boolean boo = safeCameraOpen(camId);
    Camera.Parameters parameters = mCamera.getParameters();
    mCamera.setParameters(parameters);
    bTake.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {

             mCamera.takePicture(shutter, null, null, picture);

             Log.e(getString(R.string.app_name), "After takePicture");               
         }
     });

}// END onCreate 


/* Camera operations */

private ShutterCallback shutter = new ShutterCallback() {
    @Override
    public void onShutter() {
        Log.e(getString(R.string.app_name), "onShutter");
    }
};

private PictureCallback picture = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] arg0, Camera arg1) {
        Log.e(getString(R.string.app_name), "onPicTaken");
    }
};


/* Starting up and closing down*/

private boolean safeCameraOpen(int id) {
    boolean qOpened = false;
    try {
        releaseCamera();
        mCamera = Camera.open(id);
        qOpened = (mCamera != null);
    } catch (Exception e) {
        Log.e(getString(R.string.app_name), "failed to open Camera");
        e.printStackTrace();
    }
    return qOpened;    
}

private void releaseCamera() {
    if (mCamera != null) {
        ((Camera) mCamera).release();
        mCamera = null;
        Log.e(getString(R.string.app_name), "cam released");
    }
}}
Tombola
  • 1,131
  • 5
  • 15
  • 26
  • Problem solved! One needs mCamera.startPreview() for mCamera.takePicture() to work. Even if one has no other use for previews. – Tombola Dec 25 '13 at 23:19
  • possible duplicate of [Android: "Camera.takePicture failed" Exception](http://stackoverflow.com/questions/4830772/android-camera-takepicture-failed-exception) – Alex Cohn Dec 26 '13 at 10:48
  • I didn't get any exception. But anyway. – Tombola Dec 26 '13 at 18:13

1 Answers1

0

Try:

mCamera.takePicture(shutter, picture, picture);
Santi Barbat
  • 2,097
  • 2
  • 21
  • 26