Vérifiez si l'appareil dispose d'une caméra?
-
20-09-2019 - |
Question
Dans mon application, je voudrais utiliser l'appareil photo, si l'appareil a un. Y at-il des appareils fonctionnant sous Android que ne pas ont un appareil photo? En incluant ce qui suit dans mon manifeste:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
il est essentiellement dire: « Je vais utiliser un appareil photo si l'on existe, mais ne ont pas besoin pour exécuter l'application ».
Comment pourrais-je vérifier si une caméra existe sur l'appareil, avant d'essayer d'utiliser la classe de l'appareil photo?
La solution
Je ne l'ai pas essayé, mais:
private android.hardware.Camera mCameraDevice;
try {
mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
Log.e(TAG, "fail to connect Camera", e);
// Throw exception
}
Peut-être ce dont vous avez besoin.
Autres conseils
est ce que j'utilise
import android.content.pm.PackageManager;
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}
Toutes les sortes d'autres choses amusantes pour tester sont aussi disponibles - la boussole, est emplacement disponible, est-il un front face caméra: http://developer.android.com/reference/android/content/pm /PackageManager.html
Pour savoir combien de caméras sont disponibles sur votre appareil, vous pouvez appeler:
import android.hardware.Camera;
int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
hasCamera = true;
}
Camera.getNumberOfCameras () est statique, donc il ne nécessite pas de connexion effectivement à une caméra. Cela fonctionne depuis API 9.
Edit:
Avec la nouvelle API camera2, vous pouvez également appeler CameraManager.getCameraIdList () , qui donne une liste des tous les ID de caméra valides, au lieu de simplement le compte.
vous devez utiliser pour trouver l'appareil photo dans votre appareil
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
Utilisez le PackageManager.hasSystemFeature () méthode de vérification Appareil photo:
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;
}
}
Source: https://developer.android.com /guide/topics/media/camera.html#custom-camera
Camera.getNumberOfCameras () est obsolète. Vous pouvez utiliser:
@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();
}
Essayez ceci:
/** 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;
}
}
à partir de: http://developer.android.com/guide/topics/ médias / camera.html
en suivant Nous pouvons vérifier ne appareil a caméra ou non.
/** 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;
}
}
Si vous utilisez Android 2.3, il y a des API que vous pouvez vérifier l'état de votre appareil photo, tels que le nombre de caméras (avant et arrière)
essayer
Pour caméra 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");
}
pour la caméra arrière
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");
}
Selon la documentation , vous devez utiliser package Manager pour vérifier si l'appareil photo est disponible sur l'appareil ou non
En Java:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
En Kotlin:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
J'ai trouvé dans des boîtes Android TV où vous pouvez brancher et jouer caméra usb plusieurs fois. À un certain moment, le service de la caméra commence à dire qu'il a détecté une caméra dans le système alors qu'aucun appareil photo est connecté au système. Cela se produit lorsque vous branchez / la caméra un certain nombre de fois. Pour résoudre ce problème, j'ai trouvé ce travail de solution:
//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_;
}
solution d'une ligne:
public static boolean hasCamera(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}
Mettre cette méthode dans votre classe de projet Utils.java.
Selon la documentation 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;
}
}
Reportez-vous plus sur l'API de la caméra:
https : //developer.android.com/guide/topics/media/camera.html#detect-camera