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» камеры.