私のアプリには、背面カメラを必要とする機能があります。フロントカメラの有無は私のニーズとは関係ありません。あらゆる状況でリアカメラが存在するかどうかを検出するための堅牢なルーチンをまとめるのは難しいことがわかっています. たとえば、HTC Evo 3D を使用しているユーザーは、アプリに背面カメラがない (明らかにある) と書かれていると不満を漏らしています。
多くのデバイスを持っているにもかかわらず、Nexus 7 などの前面カメラのみを備えたデバイスや、ユーザーが言及したモデルのいずれかを備えていないため、これをテストするのは難しいことです。
これが私が持っているもので、これはこのサイトの他の回答のコードから取られました:
boolean rearCameraFound = false;
if(BUILD_VERSION > 8){
int cameraCount = 0;
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for ( int camIdx = 0; camIdx < cameraCount; camIdx++ ) {
Camera.getCameraInfo( camIdx, cameraInfo );
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK ) {
try {
cam = Camera.open( camIdx );
Log.d("TAG", "Rear camera detected");
rearCameraFound = true;
} catch (RuntimeException e) {
Log.e("TAG", "Camera failed to open: " + e.getLocalizedMessage());
}
}
if ( cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) {
Log.d("TAG", "Front camera detected");
}
}
return rearCameraFound;
}else{
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
このコードをよりシンプルなバージョンに置き換えました。
PackageManager pm = context.getPackageManager();
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
ただし、たとえばNexus 7でフロントカメラのみを使用するとどうなるかはわかりません. これは true を返しますか?
リアカメラがあるかどうかを確実に教えてくれるコードを探しています!