web-dev-qa-db-fra.com

Vérifier si l'appareil a une caméra?

Dans mon application, j'aimerais utiliser l'appareil photo, si l'appareil en a un. Existe-t-il des appareils fonctionnant sous Android qui n'ont pas ont une caméra? En incluant les éléments suivants dans mon manifeste:

<uses-feature Android:name="Android.hardware.camera" Android:required="false"/>

alors il dit essentiellement "j'utiliserai un appareil photo s'il en existe un, mais vous n'en avez pas besoin pour exécuter l'application". 

Comment puis-je vérifier si une caméra existe sur le périphérique avant d'essayer d'utiliser la classe Camera?

72
mark

C'est ce que j'utilise

import Android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}

Toutes sortes de choses amusantes à tester sont également disponibles - le compas, son emplacement, existe-t-il une caméra orientée vers l'avant: http://developer.Android.com/reference/Android/content/pm/ PackageManager.html

210
dpjanes

Pour savoir combien de caméras sont disponibles sur votre appareil, vous pouvez appeler:

import Android.hardware.Camera;

int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
  hasCamera = true;
}

Camera.getNumberOfCameras () est statique, il n'est donc pas nécessaire de se connecter à une caméra. Cela fonctionne depuis l’API 9.

Modifier:

Avec la nouvelle API camera2, vous pouvez également appeler CameraManager.getCameraIdList () , qui fournit une liste de tous les ID de caméra valides, au lieu du nombre. 

40
Eddy Talvala

vous devriez l'utiliser pour trouver la caméra dans votre appareil

public static boolean isCameraAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
10
Vishwa

Camera.getNumberOfCameras () est obsolète. Vous pouvez utiliser:

@TargetApi(Build.VERSION_CODES.Lollipop)
public int getNumberOfCameras() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        try {
            return ((CameraManager) getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length;
        } catch (CameraAccessException e) {
            Log.e("", "", e);
        }
    }
    return Camera.getNumberOfCameras();
}
5
Frank

Utilisez la méthode PackageManager.hasSystemFeature () pour vérifier Camera:

private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

Source: https://developer.Android.com/guide/topics/media/camera.html#custom-camera

5
Nurul Akter Towhid

Essaye ça :

/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
    if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
        // this device has a camera
        return true;
    } else {
        // no camera on this device
        return false;
    }
}

à partir de: http://developer.Android.com/guide/topics/media/camera.html

3
samaniego

de la manière suivante, nous pouvons vérifier si le périphérique a une caméra ou non. 

/** Check if this device has a camera */
    public static boolean checkCameraHardware(Context context) {
        if (context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA)) 
        {
            return true;
        }
        else if(context.getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_CAMERA_FRONT))
        {
            return true;
        }
        else {
            return false;
        }
    }
2
DjP

essaye ça 

Pour caméra frontale

    Context context = this;
    PackageManager packageManager = context.getPackageManager();
    if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {

        Utils.makeAlertDialog(context, "Has Front Camera ?", "YES");

    } else {

        Utils.makeAlertDialog(context, "Has Front Camera ?", "NO");
          }

pour caméra de recul

    Context context = this;
    PackageManager packageManager = context.getPackageManager();
    if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

        Utils.makeAlertDialog(context, "Has back Camera ?", "YES");

    } else {

        Utils.makeAlertDialog(context, "Has back Camera ?", "NO");
          }
1
MrG

Si vous utilisez Android 2.3, certaines API vous permettent de vérifier l'état de votre appareil photo, telles que le nombre de caméras (avant et arrière).

1
mabeiyi

Une solution en ligne:

public static boolean hasCamera(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}

Placez cette méthode dans votre classe de projet Utils.Java.

0
Henrique Monte

J'ai trouvé dans les boîtes de télévision Android où vous pouvez brancher et jouer caméra USB plusieurs fois. À un moment donné, le service de caméra commence à dire qu'il a détecté une caméra dans le système alors qu'aucune caméra n'est connectée au système. Cela se produit lorsque vous branchez/débranchez la caméra plusieurs fois. Pour résoudre ce problème, j'ai trouvé cette solution efficace:

//under oncreate:
//cameraManager = ((CameraManager) getSystemService(Context.CAMERA_SERVICE)); 

public int getNumberOfCameras() {
        int count_ = 0;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
            try {
                count_ = cameraManager.getCameraIdList().length;

                if(count_==1)
                {
                    try {
                        cameraManager.getCameraCharacteristics(cameraManager.getCameraIdList()[0]);
                    }catch (Exception e)
                    {
                        count_ = 0;
                    }
                }

            } catch (Exception e) {
               //e.printStackTrace();
            }
        }
        else {
            count_ = Camera.getNumberOfCameras();
        }

        return count_;
    }
0
Sourja Banerjee

Conformément à la documentation , vous devez utiliser le Gestionnaire de packages pour vérifier si l'appareil photo est disponible sur le périphérique ou non.

En Java:

final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);

À Kotlin:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
0
Srikar Reddy