私のアプリでは、デバイスにカメラがあればカメラを使用したいと思います。 Android ない)を実行しているデバイスはありますか?マニフェストに以下を含めることにより:
<uses-feature Android:name="Android.hardware.camera" Android:required="false"/>
基本的には「カメラがあれば使用しますが、アプリを実行するのにカメラは必要ありません」と言っています。
Cameraクラスを使用する前に、デバイスにカメラが存在するかどうかを確認するにはどうすればよいですか?
これは私が使用しているものです
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 */
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;
}
}
これを試して :
/** 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
これを試して
フロントカメラ用
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");
}
Android 2.3を使用している場合、カメラの数(前面と背面)など、カメラの状態を確認できるAPIがいくつかあります
ワンラインソリューション:
public static boolean hasCamera(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}
このメソッドをUtils.Javaプロジェクトクラスに配置します。
私は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_;
}
ドキュメント に従って、パッケージマネージャーを使用して、デバイスでカメラが使用可能かどうかを確認する必要があります
Javaの場合:
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
コトリンでは:
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)