La nouvelle API camera2 me déroute. Je souhaite développer une application (pour les API Android 10 à 21) qui utilise la caméra de l'appareil. Comme indiqué ici , je devrais utiliser l'API "Camera".
Cependant, lorsque j'essaye d'ajouter l'API "Camera" (android.hardware.Camera) aux fonctionnalités utilisateur du manifeste, elle est marquée comme obsolète . Par contre, je ne peux pas le changer pour l'API "camera2" (android.hardware.camera2) car il n'est compatible qu'avec l'API Android 21+ (Android 5 - Lollipop) - Je l'aurais lié aussi, mais je ne peux que rajouter 2 liens.
Non seulement je veux que mon application fonctionne sur les anciennes versions d'Android, mais aussi sur la plus récente ...
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
De cette façon, vous aurez tout divisé et cela vous facilitera la vie.
Un conseil: la vie avec camera2 n'est pas terrible. Les vendeurs font toujours des implémentations de merde et vous devrez donc ajouter beaucoup de conditions et de solutions de contournement.
Exemple 1 - S6 signale qu'il ne prend pas en charge le flash :) Exemple 2 - Un appareil LG renvoie une liste des tailles d'image prises en charge - cependant, toutes ne sont pas réellement prises en charge !!
la source
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)...
et de choisir l'ancienne API si elle est vraie.Pour prendre en charge l'API de votre choix, utilisez le code ci-dessous. Déterminez simplement les noms appropriés correspondant aux niveaux d'API. Par exemple, l'API 21 est LOLLIPOP et l'API 15 est ICE_CREAM_SANDWICH_MR1.
la source
Bien que ce que Google recommande d'utiliser Camera2 Api> = 21, vous pourriez avoir des problèmes avec les paramètres manuels.
Lorsque vous avez besoin d'une application d'implémentation pour prendre des photos avec le mode de réglage automatique, cela fonctionnera bien. Mais! Si vous avez besoin de créer une application avec l'implémentation du mode de réglage manuel, pour les appareils dotés d'une API> = 21, vérifiez d'abord le NIVEAU MATÉRIEL pris en charge:
Sélectionnez la caméra (avant, face), obtenez ses caractéristiques et vérifiez NIVEAU MATÉRIEL.
CameraCharacteristics représente les prochains niveaux pris en charge: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.
À un niveau élevé, les niveaux sont:
Les appareils LEGACY fonctionnent dans un 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 appareils 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'image à une fréquence élevée.
Les périphériques LEVEL_3 prennent également en charge le retraitement YUV et la capture d'image RAW, ainsi que des configurations de flux de sortie supplémentaires.
Si vous avez le niveau de supprot LEGACY , vous devez utiliser l'ancienne Api de l'appareil photo .
la source
Utilisez l'annotation de support
pour éviter de vérifier
la source
Plz read link Prise en charge de la version de la caméra Ils déclarent que ....
Camera API1
Android 5.0 est obsolète Camera API1, qui continue d'être supprimée à mesure que le développement de la nouvelle plate-forme se concentre sur Camera API2. Cependant, la période d'élimination progressive sera longue et les versions d'Android continueront à prendre en charge les applications Camera API1 pendant un certain temps. Plus précisément, le soutien continue pour:
la source
J'ai découvert que la meilleure option était de créer deux activités. Utilisez la méthode générale pour vérifier l'API actuelle de l'appareil
De cette façon, je n'ai pas à avoir beaucoup de confusion lorsque je regarde le code en arrière. Le code est facile à modifier car il est séparé.
la source