보다 일반적으로 장치에 내장 카메라가 두 개 이상있는 경우 특히 그 중 하나를 초기화하는 방법이 있습니까?
Android 참조 문서에서 찾지 못했습니다.
- https://developer.android.com/reference/android/hardware/Camera.html
- https://developer.android.com/reference/android/hardware/camera2/package-summary.html
- https://developer.android.com/reference/android/hardware/camera2/CameraManager.html
삼성 SHW-M100S에는 두 대의 카메라가 있습니다. 두 대의 카메라 사용에 대한 언급이 없다면 삼성이 어떻게했는지 알기 …?
답변
private Camera openFrontFacingCameraGingerbread() {
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_FRONT) {
try {
cam = Camera.open(camIdx);
} catch (RuntimeException e) {
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
}
}
return cam;
}
AndroidManifest.xml
파일에 다음 권한을 추가 하십시오.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
참고 : 이 기능은 Gingerbread (2.3) 이상 Android 버전에서 사용할 수 있습니다.
답변
API 21부터는 Camera 2 API 를 사용해야 하기 때문에 모든 이전 답변의 메서드는 Google에서 더 이상 사용하지 않습니다 (이와 같은 문제로 인해) .
이 클래스는 API 레벨 21에서 더 이상 사용되지 않습니다. 새 애플리케이션에는 새 android.hardware.camera2 API를 사용하는 것이 좋습니다.
에서 새로운 API , 당신은 거의 완벽한 전력 안드로이드 장치 카메라 및 문서에 명시 적으로 조언 이상을
String[] getCameraIdList()
그런 다음 얻은 CameraId를 사용하여 카메라를 엽니 다.
void openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)
이에 따라 전면 카메라의 99 %는 id = “1”이고 후면 카메라 id = “0”입니다
.
비 이동식 카메라는 식별자로 0부터 시작하는 정수를 사용하는 반면, 이동식 카메라는 동일한 모델이더라도 각 개별 장치에 대해 고유 한 식별자를 사용합니다.
그러나 이는 1 개의 전면 카메라 태블릿처럼 기기 상황이 드물다 면 보유 하고있는 내장 카메라 수 를 세고 중요도 ( ‘0’)에 따라 카메라를 정렬해야 함을 의미합니다. 따라서 CAMERA_FACING_FRONT == 1 CAMERA_FACING_BACK == 0, 이는 후면 카메라가 정면보다 더 중요하다는 것을 의미합니다 .
모든 Android 기기에서 전면 카메라를 식별 하는 통일 된 방법에 대해 모르겠습니다 . 간단히 말해서, 기기 내부의 Android OS는 어떤 이유로 어떤 카메라가 정확히 어디에 있는지 알 수 없습니다. 하드 코딩 된 유일한 카메라 ID는 중요성을 나타내는 정수이거나 어떤 기기에서든 어느 쪽을 향하든간에 .. ” 뒤”.
문서 : https://developer.android.com/reference/android/hardware/camera2/package-summary.html
노골적인 예 : https://github.com/googlesamples/android-Camera2Basic
이전 API의 경우 (최신 휴대 전화 최신 Android 버전에서는 작동하지 않고 전송이 고통스럽기 때문에 권장되지 않습니다). 이 답변 과 같이 전면 카메라를 열려면 동일한 Integer CameraID (1)를 사용하십시오 .
cam = Camera.open(1);
OpenCV 를 신뢰 하여 카메라 부분을 수행하는 경우 :
내부
<org.opencv.android.JavaCameraView
../>
전면 카메라에 다음을 사용하십시오.
opencv:camera_id="1"
답변
Android 2.1부터 Android는 SDK에서 단일 카메라 만 지원합니다. 향후 Android 릴리스에 추가 될 가능성이 있습니다.
답변
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera = Camera.open();
mCamera.setDisplayOrientation(90);
mCamera.setPreviewDisplay(holder);
Camera.Parameters p = mCamera.getParameters();
p.set("camera-id",2);
mCamera.setParameters(p);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
답변
API 21 (5.0) 이상의 경우 CameraManager API의
try {
String desiredCameraId = null;
for(String cameraId : mCameraIDsList) {
CameraCharacteristics chars = mCameraManager.getCameraCharacteristics(cameraId);
List<CameraCharacteristics.Key<?>> keys = chars.getKeys();
try {
if(CameraCharacteristics.LENS_FACING_FRONT == chars.get(CameraCharacteristics.LENS_FACING)) {
// This is the one we want.
desiredCameraId = cameraId;
break;
}
} catch(IllegalArgumentException e) {
// This key not implemented, which is a bit of a pain. Either guess - assume the first one
// is rear, second one is front, or give up.
}
}
}
답변
후면 카메라 를 열려면 :-
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA)
전면 카메라 를 열려면 :-
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1 && Build.VERSION.SDK_INT < Build.VERSION_CODES.O -> {
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_FRONT) // Tested on API 24 Android version 7.0(Samsung S6)
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_FRONT) // Tested on API 27 Android version 8.0(Nexus 6P)
cameraIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true)
}
else -> cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", 1) // Tested API 21 Android version 5.0.1(Samsung S4)
}
startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA)
API 28 이상에서 작동하도록 만들 수 없습니다. 또한 일부 장치에서는 전면 카메라를 직접 열 수 없습니다 (제조업체에 따라 다름).
답변
Android 2.3 (Gingerbread) 이 출시됨에 따라 이제 android.hardware.Camera
클래스를 사용하여 카메라 수, 특정 카메라에 대한 정보를 가져오고 특정 Camera
. 여기 에서 새로운 Camera
API를 확인 하십시오 .