I was very frustrated by this as well. However, I did find a (rather pitiful) workaround.
I should say, right off, that I was not using the standard ACTION_IMAGE_CAPTURE Intent. Because I wanted to have the camera image in a window, I used my own layout and I used the following as a template:
How to Program the Google Android Camera to Take Pictures
Tapping the screen calls the Camera.PictureCallback function onPictureTaken(byte[] imageData, Camera c), which is where I grab the byte[] containing the picture. I have a global variable "byte[] MainApplication.snapshotBytes" that is assigned by the imageData from this function.
Now that the data has been saved globally, and is available to the calling Activity, how should the current activity be terminated such that the calling activity is notified? Well, there are a number of ways, but I realized early on that pressing the back button still calls OnActivityResult(...). So, I did the following:
if (imageData != null)
{
MainApp.snapshotBytes = imageData;
setResult(RESULT_OK);
onBackPressed();
}
The calling Activity was now responsible for three more things.
1: It sets the MainApp.snapshotBytes = null before starting the camera Activity.
2: When the OnActivityResult(...) was called, it first checked the *resultCode == RESULT_OK*, and then made use of the image data that was stored in the global MainApp.snapshotBytes.
3: Finally, it set the MainApp.snapshotBytes = null again so that the memory could be reclaimed by GC.
I'll be the first one to admit that it's a kludge, but it works and is compatible with or without the Camera-null-Intent bug.
I hope this helps!