본문 바로가기
Mobile Programming/Android

[Kotlin] 손전등 기능 사용하기

by 푸고배 2020. 8. 13.

개발의 편의성을 위해 Gradle Scripts<build.gradle(Module:app)에 Anko 라이브러리 의존성을 추가해준다.


dependencies {

    implementation 'org.jetbrains.anko:anko:0.10.5'

    implementation 'com.github.bumptech.glide:glide:4.7.1'

}


new<Kotlin File/Class에서 Torch라는 이름의 class를 만들어준다.


class Torch(context:Context) {

    private var cameraId : String? = null // cameraId 값을 담을 변수

    private val cameraManager = context.getSystemService(Context.CAMERA_SERVICE) as CameraManager

// system service 중 camera 서비스를 받아온다.

    init {

        cameraId = getCameraId() // 생성자에서 카메라 아이디를 받아온다. 

    }


    fun flashOn(){

        cameraManager.setTorchMode(cameraId!!, true) // 손전등 On 

    }


    fun flashOff(){

        cameraManager.setTorchMode(cameraId!!, false) // 손전등 Off

    }


    private fun getCameraId():String? {

        val cameraIds = cameraManager.cameraIdList // 핸드폰에서 인식가능한 카메라 리스트를 가져온다.

        for(id in cameraIds){ // for문을 통해 순차적으로 접근한다.

            val info = cameraManager.getCameraCharacteristics(id) // 카메라의 세부 정보를 얻는다.

            val flashAvailable = info.get(CameraCharacteristics.FLASH_INFO_AVAILABLE) // 플래시 사용가능 확인

            val lensFacing = info.get(CameraCharacteristics.LENS_FACING) // 카메라 렌즈 방향 확인

            if(flashAvailable != null // 플래시가 인식가능하고 사용 가능하면

                && flashAvailable

                && lensFacing != null // 카메라 방향이 인식가능하고 뒤에 있으면

                && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {

                return id // id 반환

            }

        }

        return null

    }

}


activity_main.xml에서 Switch 컴포넌트 추가 후 Attributes를 아래의 사진과 같이 변경해준다. 



MainActivity의 다음 코드를 이용해서 위에서 구현한 Torch의 기능을 사용할 수 있다.


var torch = Torch(this)


flashSwitch.setOnCheckedChangeListener{buttonView, isChecked->

   // buttonView : 상태 변경된 Switch 자신

   // isChecked : on/off 상태 알려줌

        if(isChecked){

            // On일 때의 동작

            torch.flashOn()

        } else {

        // Off일 때의 동작

        torch.flashOff()

    }

}


참고 자료 :  오준석의 안드로이드 생존코딩(코틀린 편)

반응형

댓글