【Android】カメラのライトを光らせる方法

Kotlinでカメラのライトをオンにして光らせてみました。

加速度センサーの値に応じて光らせる・消すができるようにしました。

ライトのことをトーチと呼ぶらしいです。

加速度センサーの記事については以下を参照ください。

ライトの制御はCameraManagerが行うので以下のように初期化します。

ライトの状態が変化すると、コールバックが実行されて、カメラIDやオンオフのフラグがとれるようです。

    lateinit var cameraManager:CameraManager
    private var lightOn:Boolean = false
    var cameraID:String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //cameraManagerのコールバックを指定する。
        cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
        cameraManager.registerTorchCallback(object : CameraManager.TorchCallback(){
            override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
                super.onTorchModeChanged(cameraId, enabled)
                cameraID = cameraId
                lightOn = enabled
            }
        }, Handler())
    }

cameraIDはnull許容のStringで宣言しておきます。

ライトがオンかどうかはフラグで管理します。

次にライトのオンオフを切り替えるための関数を作ります。

    private fun torchOn(){
        if (cameraID != null){
            try {
                if (!lightOn){
                    cameraManager.setTorchMode(cameraID!!,true)
                }else{
                    cameraManager.setTorchMode(cameraID!!,false)
                }
            }catch (e:CameraAccessException){
                e.printStackTrace()
            }
        }
    }

あとはこの関数を呼べばライトが光ります。

ライトが光っている時に呼ぶと消えます。

シンプルなコードでライトを光らせることができました。

エンジョイ、Kotlinプログラミング。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog