W mojej aplikacji chciałbym używać aparatu, jeśli urządzenie go ma. Czy są jakieś urządzenia z systemem Android, które nie mają aparatu? Dodając następujące informacje do mojego manifestu:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
to po prostu mówi: „Użyję aparatu, jeśli taki istnieje, ale nie potrzebuję go do uruchomienia aplikacji”.
Jak mogę sprawdzić, czy w urządzeniu znajduje się kamera, przed próbą użycia klasy Camera?
android
android-camera
znak
źródło
źródło
Odpowiedzi:
Nie próbowałem, ale:
private android.hardware.Camera mCameraDevice; try { mCameraDevice = android.hardware.Camera.open(); } catch (RuntimeException e) { Log.e(TAG, "fail to connect Camera", e); // Throw exception }
Może być tym, czego potrzebujesz.
źródło
Tego właśnie używam
import android.content.pm.PackageManager; PackageManager pm = context.getPackageManager(); if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { }
Dostępnych jest również wiele innych fajnych rzeczy do przetestowania - kompas, jest dostępna lokalizacja, czy jest przedni aparat: http://developer.android.com/reference/android/content/pm/PackageManager.html
źródło
public class YourActivity extends Activity { Context contextActivity; PackageManager pm; @Override public void onCreate(Bundle savedInstanceState) { ... contextActivity = this; pm = contextActivity.getPackageManager(); ...
Aby dowiedzieć się, ile kamer jest dostępnych na Twoim urządzeniu, możesz zadzwonić:
import android.hardware.Camera; int numCameras = Camera.getNumberOfCameras(); if (numCameras > 0) { hasCamera = true; }
Camera.getNumberOfCameras () jest statyczna, więc nie wymaga faktycznego łączenia się z kamerą. Działa to od API 9.
Edytować:
Dzięki nowszemu interfejsowi API camera2 można również wywołać CameraManager.getCameraIdList () , która wyświetla listę wszystkich prawidłowych identyfikatorów kamer, a nie tylko liczbę.
źródło
android.hardware.Camera
przestarzały? Czego należy użyć zamiast tej funkcji? Wiem, że teraz mamyandroid.hardware.camera2
, ale gdzie możemy znaleźć alternatywęgetNumberOfCameras
?Powinieneś użyć tego, aby znaleźć kamerę w swoim urządzeniu
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY); }
źródło
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) }
Camera.getNumberOfCameras () jest przestarzała. Możesz użyć:
@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(); }
źródło
Użyj metody PackageManager.hasSystemFeature () , aby sprawdzić kamerę:
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; } }
Źródło: https://developer.android.com/guide/topics/media/camera.html#custom-camera
źródło
Spróbuj tego :
/** 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; } }
z: http://developer.android.com/guide/topics/media/camera.html
źródło
w następujący sposób możemy sprawdzić, czy urządzenie ma aparat, czy nie.
/** 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; } }
źródło
Jeśli używasz Androida 2.3, istnieje kilka interfejsów API, za pomocą których możesz sprawdzić stan aparatu, na przykład liczbę kamer (z przodu iz tyłu)
źródło
Spróbuj tego
Do przedniego aparatu
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"); }
do aparatu z tyłu
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"); }
źródło
Zgodnie z dokumentacją systemu 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; } }
Więcej informacji o interfejsie API aparatu:
https://developer.android.com/guide/topics/media/camera.html#detect-camera
źródło
Zgodnie z dokumentacją musisz użyć Menedżera pakietów, aby sprawdzić, czy kamera jest dostępna na urządzeniu, czy nie
W Javie:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
W Kotlinie:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
źródło
Znalazłem w pudełkach telewizyjnych z Androidem, w których można kilka razy podłączyć i odtwarzać kamerę USB. W pewnym momencie usługa kamery zaczyna mówić, że wykryła jedną kamerę w systemie, podczas gdy żadna kamera nie jest podłączona do systemu. Dzieje się tak, gdy kilka razy podłączasz / odłączasz kamerę. Aby to naprawić, okazało się, że to rozwiązanie działa:
//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_; }
źródło
Rozwiązanie jednoprzewodowe:
public static boolean hasCamera(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); }
Umieść tę metodę w klasie projektu Utils.java.
źródło