Dans mon application, j'aimerais utiliser l'appareil photo, si l'appareil en a un. Existe-t-il des appareils fonctionnant sous Android qui n'ont pas ont une caméra? En incluant les éléments suivants dans mon manifeste:
<uses-feature Android:name="Android.hardware.camera" Android:required="false"/>
alors il dit essentiellement "j'utiliserai un appareil photo s'il en existe un, mais vous n'en avez pas besoin pour exécuter l'application".
Comment puis-je vérifier si une caméra existe sur le périphérique avant d'essayer d'utiliser la classe Camera?
C'est ce que j'utilise
import Android.content.pm.PackageManager;
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}
Toutes sortes de choses amusantes à tester sont également disponibles - le compas, son emplacement, existe-t-il une caméra orientée vers l'avant: 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, il n'est donc pas nécessaire de se connecter à une caméra. Cela fonctionne depuis l’API 9.
Modifier:
Avec la nouvelle API camera2, vous pouvez également appeler CameraManager.getCameraIdList () , qui fournit une liste de tous les ID de caméra valides, au lieu du nombre.
vous devriez l'utiliser pour trouver la caméra dans votre appareil
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
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();
}
Utilisez la méthode PackageManager.hasSystemFeature () pour vérifier 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;
}
}
Source: https://developer.Android.com/guide/topics/media/camera.html#custom-camera
Essaye ça :
/** 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/media/camera.html
de la manière suivante, nous pouvons vérifier si le périphérique a une 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;
}
}
essaye ça
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 caméra de recul
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");
}
Si vous utilisez Android 2.3, certaines API vous permettent de vérifier l'état de votre appareil photo, telles que le nombre de caméras (avant et arrière).
Une solution en ligne:
public static boolean hasCamera(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}
Placez cette méthode dans votre classe de projet Utils.Java.
J'ai trouvé dans les boîtes de télévision Android où vous pouvez brancher et jouer caméra USB plusieurs fois. À un moment donné, le service de caméra commence à dire qu'il a détecté une caméra dans le système alors qu'aucune caméra n'est connectée au système. Cela se produit lorsque vous branchez/débranchez la caméra plusieurs fois. Pour résoudre ce problème, j'ai trouvé cette solution efficace:
//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_;
}
Conformément à la documentation , vous devez utiliser le Gestionnaire de packages pour vérifier si l'appareil photo est disponible sur le périphérique ou non.
En Java:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
À Kotlin:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)