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 никогда не вызывается, и не выдается ошибка или исключение. Кто-нибудь знает, почему это происходит? Я посмотрел все учебные пособия по камерам в Stackru и, похоже, ничего не работает.

1 ответ

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

См. Съемка с камеры без предварительного просмотра для получения дополнительной информации.

Другие вопросы по тегам