質問

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

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

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

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

役に立ちましたか?

解決

私はそれを試してみましたが、いませんでした。

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以降に動作します。

編集ます:

新しいカメラ2のAPIを使用すると、またを呼び出すことができますだけではなく、カウントのすべての有効なカメラIDのリストを与えるCameraManager.getCameraIdList()の、、。

あなたのデバイスでカメラを見つけるためにこれを使用する必要があります。

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

Kotlin の場合:

val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)

私はあなたの回数を接続し、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_;
    }

一行ソリューション:

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

あなたのUtils.javaプロジェクトクラスでこのメソッドを置きます。

Androidのドキュメントを1として:

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

ます。https:

カメラAPIの詳細を参照してください。 ://developer.android.com/guide/topics/media/camera.html#detect-cameraする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top