2014-01-30 4 views
5

Я внедрил сервис, чтобы сделать снимок из фонового потока, но фотография никогда не берется ни на одном из моих устройств ... вот код (вывод журнала ниже) :Камера Android не может делать фото из фоновой службы

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

Журнала регистрации:

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 

В этот момент ничего еще происходит, метод onPictureTaken никогда не вызывается, и нет никакой ошибки или исключения брошено. Кто-нибудь знает, почему это происходит? Я просмотрел каждый учебник по камере StackOverflow и ничего не работает.

+0

1. Служба не работает в фоновом режиме. Чтобы использовать желаемый фоновый сервис, вы должны расширить IntentService. 2. Пожалуйста, предоставьте нам трассировку стека из исключения. –

+0

это вид трассировки стека, который он может получить, так как у меня такая же проблема – Zeeshan

+0

вы получили его? – VickyS

ответ

1

Из моего опыта и того, что я прочитал, манекен SurfaceTexture не работает на всех телефонах. Попробуйте вместо этого добавить 1x1 пиксель SurfaceView и начать предварительный просмотр в обратном вызове SurfaceView.getHolder()onSurfaceCreated (добавлен через addCallback).

Для получения дополнительной информации см. Taking picture from camera without preview.

Смежные вопросы