Android Liga / desliga o Flash da câmera programaticamente com o Camera2

Estou fazendo um aplicativo simples que funciona como uma lanterna. Preciso ser capaz de ligar e desligar o flash a partir de um botão no aplicativo com a API Camera2, pois recebo erros com a API da câmera antiga. Eu gostaria de usar uma lanterna "lanterna", onde a câmera não precisa ser aberta para que o flash acenda. Sei que é possível, pois muitos telefones têm um flash ligado / desligado no menu de configurações rápidas, mas não consigo encontrar nenhum código ou tutorial sobre como fazer isso.

Código:

Camera cam = Camera.open();     
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();

Estou executando em um Nexus 6P com Android 6.0.1.

EDIT: eu preciso usar a API Camera2. Ainda não encontrei um bom tutorial para isso e, depois de obter uma resposta, vou criar um em Q / A aqui.

questionAnswers(3)

yourAnswerToTheQuestion