In meiner App möchte ich die Kamera verwenden, falls das Gerät eine hat. Gibt es Geräte mit Android, die keine Kamera haben? Indem ich Folgendes in mein Manifest aufnehme:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
dann heißt es im Grunde "Ich werde eine Kamera verwenden, wenn eine existiert, aber keine brauche, um die App auszuführen".
Wie kann ich überprüfen, ob auf dem Gerät eine Kamera vorhanden ist, bevor ich versuche, die Kamera-Klasse zu verwenden?
android
android-camera
Kennzeichen
quelle
quelle
Antworten:
Ich habe es nicht versucht, 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 sein, was Sie brauchen.
quelle
Das benutze ich
import android.content.pm.PackageManager; PackageManager pm = context.getPackageManager(); if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { }
Alle möglichen anderen lustigen Dinge zum Testen sind ebenfalls verfügbar - der Kompass ist verfügbar, es gibt eine nach vorne gerichtete Kamera: http://developer.android.com/reference/android/content/pm/PackageManager.html
quelle
public class YourActivity extends Activity { Context contextActivity; PackageManager pm; @Override public void onCreate(Bundle savedInstanceState) { ... contextActivity = this; pm = contextActivity.getPackageManager(); ...
Um herauszufinden, wie viele Kameras auf Ihrem Gerät verfügbar sind, können Sie Folgendes anrufen:
import android.hardware.Camera; int numCameras = Camera.getNumberOfCameras(); if (numCameras > 0) { hasCamera = true; }
Camera.getNumberOfCameras () ist statisch, sodass keine Verbindung zu einer Kamera hergestellt werden muss. Dies funktioniert seit API 9.
Bearbeiten:
Mit der neueren camera2-API können Sie auch CameraManager.getCameraIdList () aufrufen , das eine Liste aller gültigen Kamera-IDs anstelle nur der Anzahl enthält.
quelle
android.hardware.Camera
veraltet? Was soll stattdessen für diese Funktion verwendet werden? Ich weiß, wir haben jetztandroid.hardware.camera2
, aber wo können wir die Alternative dazugetNumberOfCameras
finden?Sie sollten dies verwenden, um die Kamera in Ihrem Gerät zu finden
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); }
quelle
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) }
Camera.getNumberOfCameras () ist veraltet. Sie können verwenden:
@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(); }
quelle
Verwenden Sie die PackageManager.hasSystemFeature () -Methode zum Überprüfen der Kamera:
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
quelle
Versuche dies :
/** 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; } }
von: http://developer.android.com/guide/topics/media/camera.html
quelle
Auf folgende Weise können wir überprüfen, ob das Gerät über eine Kamera verfügt 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; } }
quelle
Wenn Sie Android 2.3 verwenden, gibt es einige APIs, mit denen Sie Ihren Kamerastatus überprüfen können, z. B. die Anzahl der Kameras (Vorder- und Rückseite).
quelle
Versuche dies
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ückkamera
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"); }
quelle
Gemäß 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; } }
Weitere Informationen zur Kamera-API finden Sie unter:
https://developer.android.com/guide/topics/media/camera.html#detect-camera
quelle
Gemäß der Dokumentation müssen Sie den Paket-Manager verwenden, um 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)
quelle
Ich fand in Android-TV-Boxen, wo Sie USB-Kamera mehrmals anschließen und spielen können. Irgendwann meldet der Kameradienst, dass eine Kamera im System erkannt wurde, während keine Kamera an das System angeschlossen ist. Dies geschieht, wenn Sie die Kamera mehrmals ein- und ausstecken. Um dies zu beheben, funktionierte diese Lösung wie folgt:
//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_; }
quelle
Einzeilige Lösung:
public static boolean hasCamera(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); }
Fügen Sie diese Methode in Ihre Utils.java-Projektklasse ein.
quelle