2014-01-30 9 views
5

Ich habe einen Dienst implementiert, um ein Bild von einem Hintergrund-Thread aufzunehmen, aber das Foto wird nie auf einem meiner Geräte aufgenommen ... hier ist der Code (Protokollausgabe unten) :Android-Kamera kann kein Foto vom Hintergrunddienst aufnehmen

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"); 
      } 
     }); 
    } 

Protokollierung Ausgang:

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 

An diesem Punkt nichts anderes wird nie geworfen kein Fehler oder eine Ausnahme genannt, und es ist, das onPictureTaken Verfahren geschieht. Weiß jemand, warum das passiert? Ich habe mir jedes Kamera-Tutorial zu StackOverflow angeschaut und nichts scheint zu funktionieren.

+0

1. Dienst läuft nicht im Hintergrund Thread. Um den gewünschten Hintergrunddienst zu verwenden, müssen Sie IntentService erweitern. 2. Bitte geben Sie uns Stack-Trace von der Ausnahme. –

+0

Dies ist die Art von Stack-Trace, die er bekommen könnte, da ich das gleiche Problem habe – Zeeshan

+0

hast du es funktioniert? – VickyS

Antwort

1

Aus meiner Erfahrung und was ich gelesen habe, funktioniert die Dummy SurfaceTexture Strategie nicht auf allen Telefonen. Versuchen Sie stattdessen, ein 1x1 Pixel SurfaceView hinzuzufügen und die Vorschau im SurfaceView.getHolder() 's onSurfaceCreated Rückruf (hinzugefügt über addCallback) zu starten.

Weitere Informationen finden Sie unter Taking picture from camera without preview.

Verwandte Themen