title: Android camera fails to take photo from background service
body: <p>I've implemented a service to take a picture from a background thread, but the photo never gets taken on any of my devices... here is the code (logging output below):</p>
  
  <pre><code>public class PhotoCaptureService extends Service {
      private static final String TAG = "PhotoCaptureService";
  
      @Override
      public void onStart(Intent intent, int startId) {
          super.onStart(intent, startId);
          Log.d(TAG, "Starting the PhotoCaptureService");
          takePhoto();
      }
  
      private void takePhoto() {
  
          Log.d(TAG, "Preparing to take photo");
          Camera camera = null;
  
          try {
  
              camera = Camera.open();
  
          } catch (RuntimeException e) {
  
              Log.e(TAG, "Camera not available", e);
              return;
          }
  
          if (null == camera) {
  
              Log.e(TAG, "Could not get camera instance");
              return;
          }
  
          Log.d(TAG, "Got the camera, creating the dummy surface texture");
          SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
  
          try {
  
              camera.setPreviewTexture(dummySurfaceTexture);
  
          } catch (Exception e) {
  
              Log.e(TAG, "Could not set the surface preview texture", e);
          }
  
          Log.d(TAG, "Preview texture set, starting preview");
  
          camera.startPreview();
  
          Log.d(TAG, "Preview started");
  
          camera.takePicture(null, null, new Camera.PictureCallback() {
  
              @Override
              public void onPictureTaken(byte[] data, Camera camera) {
  
                  Log.d(TAG, "Photo taken, stopping preview");
  
                  camera.stopPreview();
  
                  Log.d(TAG, "Preview stopped, releasing camera");
  
                  camera.release();
  
                  Log.d(TAG, "Camera released");
              }
          });
      }
  </code></pre>
  
  <p>Logging output:</p>
  
  <pre><code>D/PhotoCaptureService﹕ Starting the PhotoCaptureService
  D/PhotoCaptureService﹕ Preparing to take photo
  D/PhotoCaptureService﹕ Got the camera, creating the dummy surface texture
  D/PhotoCaptureService﹕ Preview texture set, starting preview
  D/PhotoCaptureService﹕ Preview started
  </code></pre>
  
  <p>At this point nothing else happens, the onPictureTaken method never gets called and there is no error or exception thrown. Does anyone know why this is happening? I've looked at every camera tutorial on StackOverflow and nothing seems to work.</p>