android - tutorial - camera2 api




Comment utiliser l'API camera ou camera2 d'Android pour prendre en charge les anciennes et les nouvelles versions d'API sans notes de dépréciation? (5)

La nouvelle API camera2 me perturbe. Je souhaite développer une application (pour les API Android 10 à 21) qui utilise l'appareil photo de l'appareil. Comme indiqué here , je devrais utiliser l'API "Caméra".

Cependant, lorsque j'essaie d'ajouter l'API "Appareil photo" (android.hardware.Camera) aux fonctionnalités utilisateur du manifeste, celle-ci est marquée comme obsolète . D'autre part, je ne peux pas le changer pour l'API "camera2" (android.hardware.camera2) car il est uniquement compatible avec Android API 21+ (Android 5 - Lollipop) - Je l'aurais lié aussi, mais je ne peux qu'ajouter 2 liens.

Non seulement je veux que mon application fonctionne sur les anciennes versions d'Android, mais aussi la plus récente ...


Bien que, ce que Google recommande d'utiliser Camera2 Api> = 21, vous pourriez avoir un problème avec les paramètres manuels.

Lorsque vous avez besoin d'une application pour prendre des photos avec le mode de réglage automatique, tout fonctionne correctement. Mais! Si nécessaire, créez une application avec une implémentation en mode de paramétrage manuel. Pour les appareils dont l'API est> = 21, commencez par vérifier les niveaux de matériel pris en charge:

Sélectionnez la caméra (Face, Face), obtenez ses caractéristiques et vérifiez NIVEAU MATÉRIEL.

mCameraCharacteristics = mCameraManager.getCameraCharacteristics(mCameraId)

val level = mCameraCharacteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL)

Les caractéristiques de la caméra représentent les niveaux supportés suivants: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.

À un niveau élevé, les niveaux sont les suivants:

Les appareils LEGACY fonctionnent en mode de compatibilité ascendante pour les appareils Android plus anciens et ont des capacités très limitées.

Les périphériques LIMITED représentent l'ensemble des fonctionnalités de base et peuvent également inclure des fonctionnalités supplémentaires qui sont des sous-ensembles de FULL.

Les périphériques FULL prennent également en charge le contrôle manuel par image des paramètres du capteur, du flash, de l'objectif et du post-traitement, ainsi que la capture d'images à une cadence élevée.

Les périphériques LEVEL_3 prennent également en charge le retraitement YUV et la capture d’images RAW, ainsi que des configurations de flux de sortie supplémentaires.

Si vous avez le niveau LEGACY supprot, vous devez utiliser l’ancien Camera Api .


J'ai découvert que la meilleure option est de créer deux activités. Utilisez la méthode générale pour vérifier l'API de périphérique actuelle

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 cette façon, je ne dois pas avoir beaucoup de confusion lorsque je regarde en arrière le code. Le code est facile à modifier car il est séparé.


Mettez toutes les méthodes de la caméra dont vous avez besoin dans une interface, puis créez une instance de caméra comme celle-ci.

    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 cette façon, tout sera divisé et cela facilitera votre vie.

Conseil - la vie avec camera2 n’est pas terrible. Les vendeurs continuent à implémenter de la merde et vous devrez donc ajouter beaucoup de conditions et de solutions de contournement.

Exemple 1 - S6 indique qu'il ne prend pas en charge Flash :). Exemple 2 - Un appareil LG renvoie une liste des tailles d'image prises en charge. Cependant, elles ne sont pas toutes prises en charge!


Plz lire le lien Camera Version Support Ils déclarent que ....
Caméra API1
Android 5.0, obsolète, Camera API1, qui continue à disparaître au fur et à mesure que la nouvelle plate-forme se concentre sur le développement de Camera API2 Toutefois, la période de suppression progressive sera longue et les versions Android continueront à prendre en charge les applications Camera API1 pendant un certain temps. Plus précisément, le soutien continue pour:

  • Interfaces API1 de la caméra pour les applications. Les applications pour appareils photo construites sur Camera API1 devraient fonctionner comme sur les appareils exécutant des versions antérieures d'Android.
  • Versions de la caméra HAL. Inclut le support pour Camera HAL1.0.

  • Utilisez l'annotation de support

        @TargetApi(21)

    pour éviter de vérifier





    android-camera2