문제

내 앱에서는 장치에 카메라를 사용하고 싶습니다. Android를 실행하는 장치가 있습니까? 하지 마라 카메라가 있습니까? 다음과 같은 것을 내 명예에 포함시킴으로써 :

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

그런 다음 기본적으로 "카메라가 존재하면 카메라를 사용하지만 앱을 실행할 필요는 없습니다"라고 말합니다.

카메라 클래스를 사용하기 전에 장치에 카메라가 있는지 확인할 수 있습니까?

도움이 되었습니까?

해결책

나는 그것을 시도하지 않았지만 : :

private android.hardware.Camera mCameraDevice;

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

필요한 것일 수 있습니다.

다른 팁

이것이 제가 사용하는 것입니다

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

장치에서 사용할 수있는 카메라 수를 찾으려면 다음과 같이 전화 할 수 있습니다.

import android.hardware.Camera;

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

Camera.getNumberOfCameras ()는 정적이므로 실제로 카메라에 연결할 필요가 없습니다. 이것은 API 9 이후로 작동합니다.

편집하다:

최신 Camera2 API를 사용하면 Cameramanager.getCameraIdlist (), 이것은 카운트 대신 모든 유효한 카메라 ID 목록을 제공합니다.

장치에서 카메라를 찾으려면 이것을 사용해야합니다.

public static boolean isCameraAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}

사용 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

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

이 시도 :

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

다음으로 우리는 장치에 카메라가 있는지 확인할 수 있습니다.

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

Android 2.3을 사용하는 경우 카메라 수 (전면 및 후면)와 같은 카메라 상태를 확인할 수있는 API가 있습니다.

이 시도

전면 카메라 용

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

에 따라 선적 서류 비치, 카메라가 장치에서 사용할 수 있는지 확인하려면 패키지 관리자를 사용해야합니다.

Java :

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

Kotlin에서 :

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

USB 카메라를 여러 번 꽂고 재생할 수있는 Android TV 상자에서 찾았습니다. 어느 시점에서 카메라 서비스는 시스템에 카메라가 감지되었다고 말하기 시작합니다. 카메라는 시스템에 연결되어 있지 않습니다. 카메라를 여러 번 꽂거나 꽂을 때 발생합니다. 이 문제를 해결하기 위해이 솔루션이 작동하는 것을 발견했습니다.

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

하나의 라인 솔루션 :

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

이 메소드를 utils.java 프로젝트 클래스에 넣으십시오.

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

카메라 API에 대한 자세한 내용 :
https://developer.android.com/guide/topics/media/camera.html#detect-camera

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top