Domanda

Nella mia app, mi piacerebbe utilizzare la fotocamera, se il dispositivo ha uno. Ci sono tutti i dispositivi con sistema operativo Android che non hanno una macchina fotografica? Includendo il seguente nel mio manifesto:

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

allora è fondamentalmente dicendo "io uso una macchina fotografica, se ne esiste uno, ma non ho bisogno di uno per eseguire l'applicazione".

Come ho potuto verificare se una telecamera presente sul dispositivo, prima di tentare di utilizzare la classe Camera?

È stato utile?

Soluzione

Non ho provato, ma:

private android.hardware.Camera mCameraDevice;

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

Può essere quello che ti serve.

Altri suggerimenti

Questo è quello che sto usando

import android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

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

Tutti i tipi di altre cose divertenti per testare sono disponibili anche - la bussola, è posizione disponibile, c'è una fotocamera sul davanti: http://developer.android.com/reference/android/content/pm /PackageManager.html

Per scoprire quante telecamere sono disponibili sul dispositivo, è possibile chiamare:

import android.hardware.Camera;

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

Camera.getNumberOfCameras () sono statici, quindi non richiede effettivamente collega a una videocamera. Questo funziona poiché API 9.

Modifica:

Con l'API camera2 più recente, è possibile anche chiamare CameraManager.getCameraIdList () , che fornisce un elenco dei tutti gli ID della telecamera validi, invece di appena il conteggio.

si dovrebbe usare questo per trovare fotocamera del dispositivo

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

Utilizzare la PackageManager.hasSystemFeature () metodo per il controllo della macchina fotografica:

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

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

Camera.getNumberOfCameras () è deprecato. È possibile utilizzare:

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

Prova questo:

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

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

seguendo modo siamo in grado di controllare lo fa dispositivo è dotato di fotocamera o meno.

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

Se si utilizza Android 2.3, ci sono alcune API che è possibile controllare lo stato della fotocamera, come ad esempio il numero di telecamere (fronte e retro)

provare questo

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

per la macchina fotografica di nuovo

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

Come per la documentazione , è necessario utilizzare Package manager per verificare se la fotocamera è disponibile sul dispositivo o no

In Java:

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

In Kotlin:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

Ho trovato in scatole di Android TV dove è possibile plug and play macchina fotografica usb un certo numero di volte. Ad un certo punto del tempo, il servizio telecamera comincia dicendo che ha rilevato una telecamera del sistema mentre nessuna telecamera è collegata al sistema. Questo accade quando si collega / la macchina fotografica un certo numero di volte. Per rimediare, ho trovato questa soluzione di lavoro:

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

Una soluzione riga:

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

Mettere questo metodo nella classe del progetto Utils.java.

Come da documentazione 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;
    }
}

Fare riferimento più sulla fotocamera API:
https : //developer.android.com/guide/topics/media/camera.html#detect-camera

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top