Question

Dans mon application, je voudrais utiliser l'appareil photo, si l'appareil a un. Y at-il des appareils fonctionnant sous Android que ne pas ont un appareil photo? En incluant ce qui suit dans mon manifeste:

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

il est essentiellement dire: « Je vais utiliser un appareil photo si l'on existe, mais ne ont pas besoin pour exécuter l'application ».

Comment pourrais-je vérifier si une caméra existe sur l'appareil, avant d'essayer d'utiliser la classe de l'appareil photo?

Était-ce utile?

La solution

Je ne l'ai pas essayé, mais:

private android.hardware.Camera mCameraDevice;

try {
  mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
  Log.e(TAG, "fail to connect Camera", e);
  // Throw exception
}

Peut-être ce dont vous avez besoin.

Autres conseils

est ce que j'utilise

import android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

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

Toutes les sortes d'autres choses amusantes pour tester sont aussi disponibles - la boussole, est emplacement disponible, est-il un front face caméra: http://developer.android.com/reference/android/content/pm /PackageManager.html

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, donc il ne nécessite pas de connexion effectivement à une caméra. Cela fonctionne depuis API 9.

Edit:

Avec la nouvelle API camera2, vous pouvez également appeler CameraManager.getCameraIdList () , qui donne une liste des tous les ID de caméra valides, au lieu de simplement le compte.

vous devez utiliser pour trouver l'appareil photo dans votre appareil

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

Utilisez le PackageManager.hasSystemFeature () méthode de vérification Appareil photo:

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

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();
}

Essayez ceci:

/** 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/ médias / camera.html

en suivant Nous pouvons vérifier ne appareil a 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;
        }
    }

Si vous utilisez Android 2.3, il y a des API que vous pouvez vérifier l'état de votre appareil photo, tels que le nombre de caméras (avant et arrière)

essayer

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 la caméra arrière

    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");
          }

Selon la documentation , vous devez utiliser package Manager pour vérifier si l'appareil photo est disponible sur l'appareil ou non

En Java:

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

En Kotlin:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

J'ai trouvé dans des boîtes Android TV où vous pouvez brancher et jouer caméra usb plusieurs fois. À un certain moment, le service de la caméra commence à dire qu'il a détecté une caméra dans le système alors qu'aucun appareil photo est connecté au système. Cela se produit lorsque vous branchez / la caméra un certain nombre de fois. Pour résoudre ce problème, j'ai trouvé ce travail de solution:

//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_;
    }

solution d'une ligne:

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

Mettre cette méthode dans votre classe de projet Utils.java.

Selon la documentation Android:

/** 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;
    }
}

Reportez-vous plus sur l'API de la caméra:
https : //developer.android.com/guide/topics/media/camera.html#detect-camera

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top