在我的应用程序,我想使用相机时,如果该设备具有一个。是否有运行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/媒体/ 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);

<强>在科特林:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

我在Android的电视盒,你可以即插即用的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_;
    }

一行溶液:

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