Eh bien, comment puis-je vérifier si un appareil Android possède ou non des fonctionnalités d'api Camera2? Il y a beaucoup de nouvelles fonctionnalités dans camera2 api telles que les contrôles manuels. Alors, comment puis-je savoir si, par programme, quelles fonctionnalités de l'API Camera2 sont implémentées?
En fait, la vérification de la version 21+ de l’API fonctionnera. L'API camera2, y compris CameraManager
, fait partie du système et ne dépend pas du matériel présent. Vous pouvez donc toujours demander à la CameraManager
une liste de CameraDevice
s, que vous pouvez ensuite interroger individuellement.
Cependant, je pense que ce que vous voulez dire réellement est "comment savoir si je peux définir manuellement les paramètres photographiques à l'aide de l'API camera2?", Qui est dépend de l'appareil que vous avez. Cela dépend du contrôle dont vous avez besoin, mais vous pouvez obtenir les informations dont vous avez besoin en récupérant le champ REQUEST_AVAILABLE_CAPABILITIES
de métadonnées . Astuce: cherchez MANUAL_SENSOR
.
En effet, l'api camera2 n'est supporté qu'à partir de l'API de niveau 21. Mais cette vérification n'est pas suffisante. Il existe des périphériques de niveau API 21, mais qui ne prennent en charge que partiellement la caméra 2. Pour vérifier cela, vous devez vérifier la valeur de CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL. Il peut être FULL, LEGACY ou LIMITED . Voir les détails ici: https://developer.Android.com/reference/Android/hardware/camera2/CameraCharacteristics.html
Voici comment l'obtenir:
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
for (String cameraId : manager.getCameraIdList()) {
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
Log.d("Img", "INFO_SUPPORTED_HARDWARE_LEVEL " + characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL));
}
J'avais aussi besoin de cela pour un autre projet. J'ai donc écrit une petite application qui analyse toutes les fonctionnalités de camera2 et indique celles qui sont disponibles sur le téléphone: https://play.google.com/store/apps/details?id=de .weis.camera2probe
Vous pouvez envoyer ce rapport par e-mail via l'application. J'énumère tous les rapports que j'ai reçus ici: https://github.com/TobiasWeis/Android-camera2probe/wiki (Le code de l'application est également disponible là-bas, au cas où quelqu'un aurait besoin de l'intégrer propre projet)
Si quelqu'un a besoin d'un extrait complet de la manière de déterminer quelle caméra de l'appareil prend en charge l'API Camera2 (prise en charge au moins limitée):
@TargetApi(Build.VERSION_CODES.Lollipop)
public boolean allowCamera2Support(int cameraId) {
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
String cameraIdS = manager.getCameraIdList()[cameraId];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIdS);
int support = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);
if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY )
Log.d(TAG, "Camera " + cameraId + " has LEGACY Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED )
Log.d(TAG, "Camera " + cameraId + " has LIMITED Camera2 support");
else if( support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL )
Log.d(TAG, "Camera " + cameraId + " has FULL Camera2 support");
else
Log.d(TAG, "Camera " + cameraId + " has unknown Camera2 support?!");
return support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED || support == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
}
catch (CameraAccessException e) {
e.printStackTrace();
}
return false;
}
@TargetApi(Build.VERSION_CODES.Lollipop)
private void checkCamera2Support() {
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop ) {
int numberOfCameras = 0;
CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
try {
numberOfCameras = manager.getCameraIdList().length;
} catch (CameraAccessException e) {
e.printStackTrace();
} catch(AssertionError e) {
e.printStackTrace();
}
if( numberOfCameras == 0 ) {
Log.d(TAG, "0 cameras");
}else {
for (int i = 0; i < numberOfCameras; i++) {
if (!allowCamera2Support(i)) {
Log.d(TAG, "camera " + i + " doesn't have limited or full support for Camera2 API");
}else{
// here you can get ids of cameras that have limited or full support for Camera2 API
}
}
}
}
}
Installez l'application: compatibilité manuelle de la caméra. Il vérifie la prise en charge de la mise au point manuelle, de la balance des blancs, de l'ISO, de la vitesse d'obturation et du format RAW. Tous exposés via le pilote camera2 HAL. J'ai installé ce qui précède dans le magasin AT & T pour vérifier les téléphones avant d'acheter. Un excellent moyen de savoir si vous achetez le modèle d'hier.
https://play.google.com/store/apps/details?id=pl.vipek.camera2_compatibility_test&hl=fr
Installez l'application une meilleure caméra. Vous pourrez tout vérifier si elle est complète, ancienne, limitée ou non. C'est ainsi que j'ai trouvé le Samsung Galaxy Tab 3 SMT820 iscamera2 api complet.