Android – использование камеры без просмотра поверхности или текстуры

Я пытался выяснить, есть ли способ использовать камеру для съемки видео или изображений без определения вида поверхности или текстуры. Я нашел эту ссылку: используйте Android-камеру без видимой поверхности

Я использовал этот трюк с текстурой на моем планшете нексуса, но не повезло! Кроме того, http://handycodeworks.com/?p=19 говорит, что этот подход не работает на всех устройствах.

Кто-нибудь знает, есть ли способ сделать это вообще? Или его просто что-то, что фреймворк андроида не поддерживает вообще, и GUI должен иметь некоторый элемент поверхности / текстуры в макете? Тогда единственный вариант – просто манипулировать макетом, чтобы он не отображался на экране в соответствии с требованиями приложения.

РЕДАКТИРОВАТЬ 1: Как объяснялось в приведенной выше ссылке http://handycodeworks.com/?p=19 , я попробовал приведенный ниже код:

public class CameraCapture { // I pass the getApplicationContext() from the main activity. public void startCameraCapture(Context contx) { SurfaceView sv = new SurfaceView(contx); mCamera = Camera.open(); mCamera.setPreviewDisplay(sv.getHolder()); mCamera.setPreviewCallback(new PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { Log.v("TAG", "on preview frame called"); } Thread.sleep(1000); mCamera.startPreview(); } 

Однако onPreviewFrame () никогда не вызывается. Я что-то упускаю?

EDIT 2:

Можно ли это сделать в собственном коде? Захват видео / использование камеры без элемента GUI (обзор поверхности / текстуры) с использованием OpenCV? Я просмотрел эту ссылку: http://docs.opencv.org/trunk/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization . Однако они также показывают пример кода с некоторым элементом просмотра камеры, определенным в основном XML-файле макета.

Solutions Collecting From Web of "Android – использование камеры без просмотра поверхности или текстуры"

Я могу сделать это, указав объект SurfaceTexture следующим образом:

 SurfaceTexture surfaceTexture = new SurfaceTexture(10); <camera object>.setPreviewTexture(surfaceTexture); 

В этом случае мне не нужно определять элемент GUI в приложении.

Это периодически возникает.

Это зависит от того, на каком уровне API вы нацеливаетесь. API 11 (Honeycomb) представил класс SurfaceTexture , который направляет входящие кадры на текстуру GLES, а не на видимое окно. Вы можете увидеть его в используемом в CameraToMpegTest , который делает «безгласную» запись видео на .mp4 (требуется API 18 для всех видеоматериалов).

Если вы ориентируетесь на 2.3.x, вам понадобится другое решение.