Невозможно сделать снимок автоматически после закрытия экрана в течение определенного периода времени - PullRequest
0 голосов
/ 22 марта 2020
private void takeSnapShots() {
    Log.e(TAG, "takeSnapShots: " + "Start");
    // here below "this" is activity context.
    SurfaceView surface = new SurfaceView(this);
    Camera camera = Camera.open();
    try {
        camera.setPreviewDisplay(surface.getHolder());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    camera.startPreview();
    camera.takePicture(null,null,jpegCallback);
}


/** picture call back */
android.hardware.Camera.PictureCallback jpegCallback = new android.hardware.Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera)
    {
        FileOutputStream outStream = null;
        try {
            String dir_path = "/storage/C897-99BC/Android/data/com.dbsource.dbinsert/NewFolder/";
            Date currentTime = Calendar.getInstance().getTime();
            outStream = new FileOutputStream(dir_path+ File.separator+currentTime.getTime()+".jpg");
            outStream.write(data);
            outStream.close();
            Log.d("CAM", "onPictureTaken - wrote bytes: " + data.length);
        } catch (FileNotFoundException e) {
            Log.e(TAG, "onPictureTaken: " + e.toString());
            e.printStackTrace();
        } catch (IOException e) {
            Log.e(TAG, "onPictureTaken: " + e.toString());
            e.printStackTrace();
        } finally {
            camera.stopPreview();
            camera.release();
            camera = null;
            Log.e(TAG, "takeSnapShots: " + "End");


        }
        Log.d("CAM" ,"onPictureTaken - jpeg");
    }
};`

Я использовал приведенный выше код и функцию TimerTask для запуска указанной выше функции каждые 2 секунды. Сначала все получилось очень хорошо. Но после того, как было сделано несколько снимков, TimerTask продолжает работать, но снимки не были сделаны.

Код ошибки :

/ com.dbsource.dbinsert E / Camera_APM :: [APM] Поток APM запущен /com.dbsource.dbinsert E / Camera_APM :: [APM] Это приложение forground app /? E / CameraService: Отказ в доступе: невозможно использовать камеру с незанятого идентификатора UID pid = 5436, uid = 10275 /com.dbsource.dbinsert E / CAM: java .lang.RuntimeException: не удается подключиться к службе камеры

Обновление :

После camera.release (), перед тем, как вызвать функцию, возникла «Ошибка 3» камеры.

1 Ответ

0 голосов
/ 22 марта 2020

Я добавил свой комментарий в поле ответа из-за этого ограничения: «Вы должны иметь 50 репутацию, чтобы комментировать».

В любом случае, вернемся к вашему вопросу. IMO, 2 секунды «слишком быстро» для повторных операций с камерой. Конечно, это может сработать пару раз, но в конечном итоге оно достигнет sh. Есть множество RuntimeExceptions, которые могут произойти, могут быть связаны с камерой, записью хранилища и т. Д. c. Продлите сроки, если это возможно. Если нет, вам, вероятно, придется искать другие альтернативные реализации в сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...