Проверьте, есть ли на устройстве камера? - PullRequest
76 голосов
/ 22 декабря 2009

В моем приложении я бы хотел использовать камеру, если она есть на устройстве. Есть ли устройства под управлением Android, у которых нет камеры? Включив в мой манифест следующее:

<uses-feature android:name="android.hardware.camera" android:required="false"/>

тогда в основном говорится: «Я буду использовать камеру, если она есть, но она мне не понадобится для запуска приложения».

Как я могу проверить, существует ли на устройстве камера, прежде чем пытаться использовать класс Camera?

Ответы [ 13 ]

214 голосов
/ 11 марта 2011

Это то, что я использую

import android.content.pm.PackageManager;

PackageManager pm = context.getPackageManager();

if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}

Доступны также все другие забавные вещи для проверки - компас, местоположение доступно, есть ли фронтальная камера: http://developer.android.com/reference/android/content/pm/PackageManager.html

42 голосов
/ 15 мая 2012

Чтобы узнать, сколько камер доступно на вашем устройстве, вы можете позвонить:

import android.hardware.Camera;

int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
  hasCamera = true;
}

Camera.getNumberOfCameras () является статическим, поэтому не требует фактического подключения к камере. Это работает с API 9.

Edit:

С более новым API camera2 вы также можете вызвать CameraManager.getCameraIdList () , который выдает список всех действительных идентификаторов камеры, а не только счетчик.

10 голосов
/ 17 января 2015

вы должны использовать это, чтобы найти камеру в вашем устройстве

public static boolean isCameraAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
6 голосов
/ 21 июня 2016

Используйте метод PackageManager.hasSystemFeature () для проверки камеры:

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;
    }
}

Источник: https://developer.android.com/guide/topics/media/camera.html#custom-camera

5 голосов
/ 06 октября 2015

Camera.getNumberOfCameras () устарела. Вы можете использовать:

@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();
}
3 голосов
/ 13 апреля 2016

следующим образом мы можем проверить, имеет ли устройство камеру или нет.

/** 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;
        }
    }
3 голосов
/ 04 декабря 2015

Попробуйте это:

/** 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;
    }
}

от: http://developer.android.com/guide/topics/media/camera.html

1 голос
/ 21 октября 2014

попробуйте

Для фронтальной камеры

    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");
          }

для задней камеры

    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");
          }
1 голос
/ 28 февраля 2012

Если вы используете Android 2.3, есть несколько API-интерфейсов, с помощью которых вы можете проверить состояние вашей камеры, например, количество камер (передняя и задняя)

0 голосов
/ 27 марта 2019

Однолинейное решение:

public static boolean hasCamera(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}

Поместите этот метод в свой класс проекта Utils.java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...