La nueva API camera2 me confunde. Quiero desarrollar una aplicación (para las API de Android 10 - 21) que usa la cámara del dispositivo. Como se indicó aquí , debería usar la API "Cámara".
Sin embargo, cuando trato de agregar la API "Cámara" (android.hardware.Camera) a las características del usuario del manifiesto, se marca como obsoleto . Por otro lado, no puedo cambiarlo a la API "camera2" (android.hardware.camera2) ya que solo es compatible con Android API 21+ (Android 5 - Lollipop): también lo habría vinculado, pero solo puedo agregar 2 enlaces.
No solo quiero que mi aplicación se ejecute en versiones anteriores de Android, sino también la más nueva ...
fuente
Coloque todos los métodos de la cámara que necesita en una interfaz y luego cree una instancia de cámara como esta
De esta forma tendrás todo dividido y te hará la vida mucho más fácil.
Un consejo: la vida con camera2 no es tan genial. Los vendedores todavía hacen implementaciones de basura y, por lo tanto, tendrá que agregar muchas condiciones y soluciones alternativas.
Ejemplo 1: S6 informa que no es compatible con flash :) Ejemplo 2: un dispositivo LG informa una lista de tamaños de imagen admitidos; sin embargo, ¡no todos son compatibles!
fuente
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)...
y elegir la antigua API si es cierta.Para admitir la API que desee, use el siguiente código. Simplemente determine los nombres apropiados correspondientes a los niveles de API. Por ejemplo, API 21 es LOLLIPOP y API 15 es ICE_CREAM_SANDWICH_MR1.
fuente
Aunque, lo que Google recomienda usar Camera2 Api> = 21, pero podría tener problemas con la configuración manual.
Cuando necesite implementar la aplicación para tomar fotos con el Modo de configuración automática, funcionará bien. ¡Pero! Si necesita crear una aplicación con la implementación del Modo de configuración manual, para dispositivos que tienen API> = 21, en primer lugar, necesita verificar el NIVEL DE HARDWARE compatible:
Seleccione la cámara (frontal, frontal), obtenga las características y compruebe el NIVEL DE HARDWARE.
Las características de la cámara representan los siguientes niveles admitidos: LIMITADO, COMPLETO, LEGADO, NIVEL_3, EXTERNO.
En un nivel alto, los niveles son:
Los dispositivos LEGACY funcionan en un modo de compatibilidad con versiones anteriores para dispositivos Android más antiguos y tienen capacidades muy limitadas.
Los dispositivos LIMITADOS representan el conjunto de características de línea de base y también pueden incluir capacidades adicionales que son subconjuntos de FULL.
Los dispositivos COMPLETOS también admiten el control manual por cuadro de la configuración del sensor, flash, lente y posprocesamiento, y la captura de imágenes a alta velocidad.
Los dispositivos LEVEL_3 también admiten el reprocesamiento YUV y la captura de imágenes RAW, junto con configuraciones de flujo de salida adicionales.
Si obtuviste el nivel de soporte de LEGACY , debes usar la antigua Camera Api .
fuente
Usa la anotación de soporte
para evitar comprobar
fuente
Por favor, lea el enlace Soporte de la versión de la cámara. Dicen que ...
Camera API1
Android 5.0 desaprobó la Camera API1, que continúa siendo eliminada a medida que el desarrollo de la nueva plataforma se centra en Camera API2. Sin embargo, el período de eliminación será prolongado, y las versiones de Android continuarán admitiendo aplicaciones Camera API1 durante algún tiempo. Específicamente, el soporte continúa para:
fuente
Descubrí que la mejor opción es crear dos actividades. Use la forma general de verificar la API del dispositivo actual
De esta manera no tengo que tener mucha confusión cuando miro hacia atrás el código. El código es fácil de modificar ya que se separó.
fuente