Detecting camera features with Camera2 | by David East | Google Developers | Medium
Camera2는 장치의 카메라에 직접 엑세스해야 하는 경우에 사용된다.
카메라에 세부적인 수정이 필요없으면 Camera를 intent하는 방식이 제일 좋다고 한다.
Camear2의 장점
- 최신 하드웨어에서 향상된 성능
- 더 빠른 간격으로 이미지 찰영
- 여러 카메라의 미리보기 표시
- 효과 및 필터를 직접 적용 가능
추가적으로 API를 요청해 필요한 기능을 감지할 수 있다.
예제) 전면 카메라 금지 시키기
먼저 기기에서 사용 가능한 카메라 목록을 가져와야한다. Camera2 API에서 전면 카메라가 있는 지 알려줄 수 있지만,
Step 1:Camera 얻기
Camera2 API의 핵심은 CameraManager클래스이다.
CameraManager를 통해서 getCameraIdList()를 사용하면 카메라 ID의 문자열 배열을 얻을 수 있다. cameraID는 장치에서 사용할 수 있는 카메라를 나타낸다.
getCameraCharactertics() 메서드를 사용하여 cameraID를 전달하고 장치에 대해 사용 가능한 설정 및 출력 매개변수를 가져올 수 있다.
val manager = getSystemService(CAMERA_SERVICE) as CameraManager
try{
for (cameraId in manager.cameraIdList){
// 기기에서 사용 가능한 카메라 목록을 가져온다.
val char = manager.getCameraCharacteristics(cameraId)
// 전면 카메라 여부를 get함
val fancing = char.get(CameraCharacteristics.LENS_FACING)
}
} catch (e: CameraAccessException){
e.printStackTrace()
}
Step 2: characteristics 요청
CameraCharacteristics 개체가 있으면 장치에서 사용 가능한 카메라를 요청할 수 있다
get() 메서드는 CameraCharacteristic필드를 예상하고 필드값을 반환합니다.
// 전면 카메라 여부를 get함
val fancing = char.get(CameraCharacteristics.LENS_FACING)
Step 3: 전면 카메라 금지
LENS_FANCING_FRONT를 이용해서 전면카메라를 감지할 수 있다.
private fun detectedSelfieCamera(cameraId:String){
val char = manager.getCameraCharacteristics(cameraId)
val fancing = char.get(CameraCharacteristics.LENS_FACING)
if(fancing != null && fancing == CameraCharacteristics.LENS_FACING_FRONT){
// 전면 카메라가 아님
} else {
// 전면 카메라가 맞음
}
}
전면 카메라 감지뿐만 아니라 다른 기능의 예제는 아래의 깃허브를 통해서 확인하면 된다.
android-Camera2Basic/kotlinApp at master · googlearchive/android-Camera2Basic (github.com)
'안드로이드 > 잡다한 지식' 카테고리의 다른 글
드로이드나이츠 2021 테스트코드편 (0) | 2022.02.20 |
---|---|
안드로이드 kapt (0) | 2021.12.08 |
안드로이드 JCenter Deprecated 소식 (0) | 2021.10.20 |
뷰 바인딩 (0) | 2021.07.12 |
ViewModel 및 사용 (0) | 2021.07.12 |