without twrp studio hal3 habilitar enable camera2api cam2api api2 android api camera android-camera android-camera2

twrp - ¿Cómo usar la cámara de Android o la API de camera2 para admitir versiones de API antiguas y nuevas sin notas de desaprobación?



enable camera2 api twrp (7)

A pesar de que la antigua API de la cámara está marcada como obsoleta, sigue siendo completamente funcional y lo seguirá siendo durante bastante tiempo (ya que casi todas las aplicaciones que usan la cámara en Play Store la usan actualmente).

Tendrá que ignorar las quejas de Android Studio sobre su desaprobación, pero si desea admitir versiones de Android anteriores a la 21, debe usar la API anterior.

En el nivel 21 de API, ciertamente puede usar la nueva API y sus nuevas características, pero actualmente tendrá que mantener un flujo completamente separado en su aplicación si cambia entre las API. Desafortunadamente, las dos API tienen una visión del mundo lo suficientemente diferente que es difícil escribir una biblioteca de soporte que le permita usar algo como la nueva API en dispositivos más antiguos (donde la biblioteca se asigna de la nueva API a la antigua API si no en API 21+).

La nueva API camera2 me confunde. Quiero desarrollar una aplicación (para las API de Android 10-21) que utiliza la cámara del dispositivo. Como se indicó here , 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 ...


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 es necesario 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 verifique el NIVEL DE HARDWARE.

mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId) val level = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)

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 .


Coloque todos los métodos de la cámara que necesita en una interfaz y luego cree una instancia de cámara como esta

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Log.d(TAG, "camera2 selected"); this.camera = new Camera2(getContext()); } else { Log.d(TAG, "camera1 selected"); this.camera = new Camera1(getContext()); }

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 aún 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!


Descubrí que la mejor opción es crear dos actividades. Use la forma general para verificar la API actual del dispositivo

Intent i; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { i = new Intent(context,camera2.class) } else { i = new Intent(context,camera.class); } startActivity(i);

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ó.


Para admitir la API que desee, use el código a continuación. 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.

if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) && ((Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP))) { // your code here - is between 15-21 } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // your code here - is api 21 }


Por favor, lea el enlace Versión de la cámara Soporte Indican que ...
Camera API1
Android 5.0 desaprobó Camera API1, que continúa siendo eliminado a medida que el desarrollo de la nueva plataforma se enfoca en Camera API2. Sin embargo, el período de eliminación será prolongado y las versiones de Android seguirán admitiendo aplicaciones Camera API1 durante algún tiempo. Específicamente, el soporte continúa para:

  • Interfaces API1 de cámara para aplicaciones. Las aplicaciones de cámara creadas sobre Camera API1 deberían funcionar como lo hacen en dispositivos que ejecutan versiones anteriores de Android.
  • Versiones de cámara HAL. Incluye soporte para la cámara HAL1.0.

  • Usa la anotación de soporte

    @TargetApi(21)

    para evitar comprobar