PreviewCallback и PreviewCallback с буфером не вызываются

У меня есть вопрос относительно обратных вызовов предварительного просмотра с Android 4.0.x. Я создал камеру, создаю поверхность для отображения изображения камеры on previewCallback -event. Все работает нормально.

Но с Android 4.0.x ни onPreviewCallback не называется ни onPreviewCallbackWithBuffer . Есть ли обходной путь для этой проблемы?

Я хочу снять снимок экрана и не хочу использовать takePicture() -way, потому что он замораживает живое изображение на короткое время.

Вы должны вызвать setPreviewCallback в методе surfaceChanged, а не только в surfaceCreated.

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { if (mHolder.getSurface() == null){ return; } try { mCamera.stopPreview(); } catch (Exception e){ // ignore: tried to stop a non-existent preview } try { mCamera.setPreviewCallback(this); mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (Exception e){ Log.d(TAG, "Error starting camera preview: " + e.getMessage()); } } 

Вы можете вызвать setOneShotPreviewCallback

 mCamera.setOneShotPreviewCallback(new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Parameters parameters = camera.getParameters(); int format = parameters.getPreviewFormat(); //YUV formats require more conversion if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16) { int w = parameters.getPreviewSize().width; int h = parameters.getPreviewSize().height; // Get the YuV image YuvImage yuv_image = new YuvImage(data, format, w, h, null); // Convert YuV to Jpeg Rect rect = new Rect(0, 0, w, h); ByteArrayOutputStream output_stream = new ByteArrayOutputStream(); yuv_image.compressToJpeg(rect, 100, output_stream); byte[] byt = output_stream.toByteArray(); FileOutputStream outStream = null; try { // Write to SD Card File file = createFileInSDCard(FOLDER_PATH, "Image_"+System.currentTimeMillis()+".jpg"); //Uri uriSavedImage = Uri.fromFile(file); outStream = new FileOutputStream(file); outStream.write(byt); outStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } } } 
Intereting Posts
Как получить имя установленного приложения в android? Как мы можем получить дату изготовления телефона Android, исправленную проверку программным путем? Android.os.Bundle не может быть разрешен в Android-проекте libgdx Использование учетной записи Google в качестве входа в систему … что дальше? «Приложение не установлено» при установке самозаверяющего apk на SD-карте Android Studio сгенерировал сбой APK во время работы приложения на одном телефоне. Что не так? Нечувствительность к регистру автоматически завершена в android Как добавить визуальные эффекты к видео с помощью Android 4.0 Underflow в восстановлении в android 4.3 Как преобразовать объект Java в JSONObject? Android – программный набор TextView TextStyle? Gson не может анализировать данные формата json формата в Kotlin Новый API сервисов Google Play, поддерживающий соединение через действия Android-SQLite LIKE escape-шаблон Как фильтровать результаты Picker Picker по PlaceType?