Frage

In meiner app, würde Ich mag die Kamera verwenden, wenn das Gerät eine hat. Gibt es Geräte mit Android, dass nicht eine Kamera? Durch die Einbeziehung der folgenden in meinem Manifest:

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

dann ist es im Grunde sagen: „Ich eine Kamera verwenden werden, wenn ein solches vorhanden ist, aber nicht einer braucht die App zu laufen“.

Wie kann ich überprüfen, ob eine Kamera auf dem Gerät vorhanden ist, bevor Sie die Kamera-Klasse benutzen?

War es hilfreich?

Lösung

Ich habe versucht, es nicht, aber:

private android.hardware.Camera mCameraDevice;

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

Kann das sein, was Sie brauchen.

Andere Tipps

Das ist, was ich mit

import android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

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

Alle möglichen anderen Spaß zu Test für sind auch vorhanden - der Kompass ist Standort verfügbar ist, gibt es eine Frontkamera: http://developer.android.com/reference/android/content/pm /PackageManager.html

Um herauszufinden, wie viele Kameras auf dem Gerät verfügbar sind, können Sie anrufen:

import android.hardware.Camera;

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

Camera.getNumberOfCameras () ist statisch, so dass es nicht tatsächlich erforderlich ist, um eine Kamera anschließen. Dies funktioniert, da API 9.

Edit:

Mit der neueren camera2 API können Sie auch anrufen CameraManager.getCameraIdList () , die eine Liste der alle gültigen Kamera-IDs gibt, statt nur die Zählung.

Sie sollten diese verwenden Kamera in Ihrem Gerät finden

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

Verwenden Sie die PackageManager.hasSystemFeature () Methode zur Kamera Überprüfung:

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

Quelle: https://developer.android.com /guide/topics/media/camera.html#custom-camera

Camera.getNumberOfCameras () ist veraltet. Sie können:

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

Versuchen Sie diese:

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

aus: http://developer.android.com/guide/topics/ media / camera.html

durch folgende wir überprüfen können, tut Gerätekamera hat oder nicht.

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

Wenn Sie Android 2.3 verwenden, gibt es einige APIs, dass Sie Ihren Kamerastatus überprüfen können, wie zum Beispiel der Anzahl der Kameras (Vorder- und Rückseite)

Versuchen Sie, diese

Für Frontkamera

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

für rückseitige Kamera

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

Gemäß der Dokumentation , die Sie verwenden Package Manager zu überprüfen, ob die Kamera auf dem Gerät verfügbar ist oder nicht

In Java:

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

In Kotlin:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

fand ich in android-TV-Boxen, wo Sie und Play-USB-Kamera einige Male anschließen können. Zu einem bestimmten Zeitpunkt, wird die Kamera-Dienst gestartet wird sagen, dass es eine Kamera in dem System erfasst wird, während keine Kamera mit dem System verbunden ist. Dies geschieht, wenn Sie in / out der Kamera einige Male stecken. Um dies zu beheben, fand ich diese Lösung arbeiten:

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

Eine Zeile Lösung:

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

Setzen Sie diese Methode in Ihrer Utils.java Projektklasse.

Wie pro Android-Dokumentation:

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

Siehe mehr über die Kamera-API:
https : //developer.android.com/guide/topics/media/camera.html#detect-camera

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top