82

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

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

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

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

4

15 に答える 15

226

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

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

于 2011-03-10T21:31:26.453 に答える
43

デバイスで使用可能なカメラの数を確認するには、次の電話番号に電話してください。

import android.hardware.Camera;

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

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

編集:

新しいcamera2APIを使用すると、CameraManager.getCameraIdList()を呼び出すこともできます。これにより、カウントだけでなく、すべての有効なカメラIDのリストが提供されます。

于 2012-05-15T01:26:01.017 に答える
12

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

public static boolean isCameraAvailable(Context context) {
    return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
于 2015-01-17T11:37:13.057 に答える
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();
}
于 2015-10-06T14:47:25.353 に答える
5

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

于 2016-06-21T14:33:18.583 に答える
3

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

/** 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;
        }
    }
于 2016-04-13T07:43:25.463 に答える
2

これを試して :

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

于 2015-12-04T00:31:34.503 に答える
2

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

于 2019-09-20T05:52:16.037 に答える
1

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

于 2012-02-28T12:11:48.507 に答える
1

これを試して

フロントカメラ用

    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");
          }
于 2014-10-21T05:19:02.983 に答える
0

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

Javaの場合:

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

Kotlinの場合:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
于 2018-10-20T08:42:00.377 に答える
0

USBカメラを何度もプラグアンドプレイできるAndroidTVボックスで見つけました。ある時点で、カメラサービスは、システムにカメラが接続されていないときに、システム内で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_;
    }
于 2018-11-23T05:39:09.533 に答える
0

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

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

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

于 2019-03-27T17:07:54.723 に答える
0

外部カメラでもある可能性があるため、デバイス上の任意のカメラを確認することをお勧めします

packageManager.hasSystemFeature(FEATURE_CAMERA_ANY)

ドキュメンテーション:

getSystemAvailableFeaturesおよびhasSystemFeatureの機能:デバイスには、ある方向を向いているカメラが少なくとも1つあるか、接続されている外部カメラをサポートできます。

于 2021-11-15T20:13:16.610 に答える
-45

私はそれを試していませんが:

private android.hardware.Camera mCameraDevice;

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

あなたが必要なものかもしれません。

于 2009-12-22T12:17:48.500 に答える