概要
APIレベル23 / Android 6.0 / Marshmallowから、従来手法では必要だった"android.permission.FLASHLIGHT"のパーミッション不要でカメラのライトのON/OFF制御が出来るようになっています。この対応方法について説明します。
コード
android.hardware.camera2.CameraManagerを利用します。サンプルコードを以下に記載しますが、とっても簡単に対応出来ます。
FlashlightTorchCOntroller
import android.annotation.TargetApi;
import android.content.Context;
import android.hardware.camera2.CameraManager;
import androidx.annotation.NonNull;
import android.os.Handler;
@TargetApi(23)
public class FlashlightTorchController {
    private CameraManager cameraManager;
    private String cameraID;
    private boolean SW;
    public FlashlightTorchController(Context context) {
        SW = false;
        cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        // カメラマネージャーにトーチモードのコールバックを登録
        cameraManager.registerTorchCallback(new CameraManager.TorchCallback() {
            // トーチモードが変更された時の処理
            @Override
            public void onTorchModeChanged(@NonNull String cameraId, boolean enabled) {
                super.onTorchModeChanged(cameraId, enabled);
                // カメラIDをセット
                cameraID = cameraId;
                // SWに現在の状態をセット
                SW = enabled;
            }
        }, new Handler());
    }
    public void toggle() {
        if (cameraManager == null || cameraID == null)
            return ;
        cameraManager.setTorchMode(cameraID, !SW);
    }
}