Android: onPreviewFrame никогда не вызывается без SurfaceView
На некоторых устройствах onPreviewFrame
не вызывается, если для отображения предварительного просмотра камеры не установлено SurfaceView
.
Однако я обрабатываю камеру в сервисе, поэтому я не могу установить SurfaceView
, но я все равно не хочу иметь видимый предварительный просмотр.
Как это можно сделать? Могу ли я программно создать SurfaceView
и установить его с помощью Camera::setPreviewDisplay
?
Это должно быть возможно или нет?
Он работает практически на каждом телефоне без SurfaceView
, но не на HTC One X и Google Nexus One...
Ответы
Ответ 1
В соответствии с этим вопросом создание кода SurfaceView
отлично работает. Хотя я не думаю, что вы можете создать его через службу.
Другой подход - создать 1px-1px SurfaceView
внутри RelativeLayout
и скрыть его каким-то другим видом поверх него. (видимость должна быть VISIBLE
). Мы используем этот трюк для Path интерфейса камеры, где визуализируем предварительные буферы через OpenGL, и он отлично работает.
Ответ 2
В соответствии с документацией, легко настраиваемой, видимым и отображаемым видом поверхности необходимо активировать предварительный просмотр камеры. Он может быть перекрыт, хотя
Ответ 3
Из API 11 on вы можете использовать SurfaceTexture
вместо SurfaceView
для получения кадров с камеры. Затем, вместо использования Camera.setPreviewDisplay
, просто используйте Camera.setPreviewTexture
.
Этот ответ, а этот обсуждает этот вопрос.