public void getImageFromCamera(final String fileid, final boolean callOnFailure, final String userKey) {

        final ImmutablePair<String, Uri> newImageData = ImageUtils.createNewPublicImageUri(fileid);
        final Uri imageUri = newImageData.right;
        if (imageUri == null || imageUri.equals(Uri.EMPTY) || StringUtils.isBlank(imageUri.toString())) {
            failIntent(REQUEST_CODE_CAMERA, callOnFailure, userKey);
            return;
        }

        // create Intent to take a picture and return control to the calling application
        final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); // set the image uri

        // start the image capture Intent
        startIntent(intent, new IntentContextData(REQUEST_CODE_CAMERA, fileid, imageUri, callOnFailure, userKey, false));
    }
lets the user create a new image via camera for strict usage by c:geo.
This method will create both a copy of the created image in public image storage as well as a local image copy
in private app storage for further processing by c:geo
This function wil only work if you call {@link #onActivityResult(int, int, Intent)} in
your activity as explained there.

@param fileid        an id which will be part of resulting image name (e.g. a cache code)
@param callOnFailure if true, then callback will be called also on image shooting failure (with img=null)
main/src/main/java/cgeo/geocaching/ui/ImageActivityHelper.java