Überprüfen Sie, ob das Gerät über eine Kamera?
-
20-09-2019 - |
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?
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