web-dev-qa-db-ja.com

デバイスにカメラがあるかどうかを確認しますか?

私のアプリでは、デバイスにカメラがあればカメラを使用したいと思います。 Android ない)を実行しているデバイスはありますか?マニフェストに以下を含めることにより:

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

基本的には「カメラがあれば使用しますが、アプリを実行するのにカメラは必要ありません」と言っています。

Cameraクラスを使用する前に、デバイスにカメラが存在するかどうかを確認するにはどうすればよいですか?

77
mark

これは私が使用しているものです

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

216
dpjanes

デバイスで使用可能なカメラの数を調べるには、以下を呼び出すことができます。

import Android.hardware.Camera;

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

Camera.getNumberOfCameras()は静的であるため、実際にカメラに接続する必要はありません。これはAPI 9以降で機能します。

編集:

新しいcamera2 APIでは、 CameraManager.getCameraIdList() を呼び出すこともできます。これは、カウントだけでなく、すべての有効なカメラIDのリストを提供します。

42
Eddy Talvala

これを使用してデバイスでカメラを見つける必要があります

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

カメラを確認するには、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

6

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

次の方法で、デバイスにカメラがあるかどうかを確認できます。

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

これを試して :

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

from: http://developer.Android.com/guide/topics/media/camera.html

3
samaniego

これを試して

フロントカメラ用

    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
MrG

Android 2.3を使用している場合、カメラの数(前面と背面)など、カメラの状態を確認できるAPIがいくつかあります

1
mabeiyi

ワンラインソリューション:

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

このメソッドをUtils.Javaプロジェクトクラスに配置します。

0
Henrique Monte

私はAndroid tv boxで何度もusbカメラをプラグアンドプレイできます。ある時点で、カメラサービスは、カメラがないときにシステムで1台のカメラを検出したと言い始めますシステムに接続されています。これは、カメラを何度もプラグイン/アウトするときに発生します。

//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
Sourja Banerjee

ドキュメント に従って、パッケージマネージャーを使用して、デバイスでカメラが使用可能かどうかを確認する必要があります

Javaの場合:

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

コトリンでは:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
0
Srikar Reddy