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

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

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

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

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

Ответы [ 13 ]

0 голосов
/ 23 ноября 2018

Я нашел в коробках Android TV, где вы можете подключить и играть в USB-камеру несколько раз. В какой-то момент служба камер начинает говорить, что обнаружила одну камеру в системе, когда ни одна камера не подключена к системе. Это происходит, когда вы подключаете / выключаете камеру несколько раз. Чтобы исправить это, я обнаружил, что это решение работает:

//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_;
    }
0 голосов
/ 20 октября 2018

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

На Java:

final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);

В Котлине:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
0 голосов
/ 22 декабря 2009

Я не пробовал, но:

private android.hardware.Camera mCameraDevice;

try {
  mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
  Log.e(TAG, "fail to connect Camera", e);
  // Throw exception
}

Может быть, что вам нужно.

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