Quero ativar a luz do flash frontal (não com a visualização da câmera) programaticamente no Android. Pesquisei no Google, mas a ajuda que encontrei me encaminhava para esta página
Alguém tem links ou código de amostra?
fonte
Quero ativar a luz do flash frontal (não com a visualização da câmera) programaticamente no Android. Pesquisei no Google, mas a ajuda que encontrei me encaminhava para esta página
Alguém tem links ou código de amostra?
Para esse problema, você deve:
Verifique se a lanterna está disponível ou não?
Se sim, então Desligue / Ligue
Caso contrário, você pode fazer o que for, de acordo com as necessidades do seu aplicativo.
Para verificar a disponibilidade do flash no dispositivo:
Você pode usar o seguinte:
context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
que retornará true se houver um flash disponível, false se não estiver.
Consulte:
http://developer.android.com/reference/android/content/pm/PackageManager.html para obter mais informações.
Para ligar / desligar a lanterna:
Eu pesquisei e consegui isso sobre android.permission.FLASHLIGHT. A permissão dos manifestos do Android parece promissora:
<!-- Allows access to the flashlight -->
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal"
android:label="@string/permlab_flashlight"
android:description="@string/permdesc_flashlight" />
Em seguida, faça uso da câmera e defina Camera.Parameters . O principal parâmetro usado aqui é FLASH_MODE_TORCH .
por exemplo.
Snippet de código para ligar a lanterna da câmera.
Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.startPreview();
Fragmento de código para desligar a luz led da câmera.
cam.stopPreview();
cam.release();
Acabei de encontrar um projeto que usa essa permissão. Verifique o código src das configurações rápidas. aqui http://code.google.com/p/quick-settings/ (Nota: este link agora está quebrado)
Para o Flashlight, consulte diretamente http://code.google.com/p/quick-settings/source/browse/trunk/quick-settings/#quick-settings/src/com/bwx/bequick/flashlight (Nota: este link é agora quebrado)
Atualização6 Você também pode tentar adicionar um SurfaceView conforme descrito nesta resposta Lanterna LED no Galaxy Nexus controlável por qual API? Esta parece ser uma solução que funciona em muitos telefones.
Update 5 Major Update
Encontrei um link alternativo (para os links quebrados acima): http://www.java2s.com/Open-Source/Android/Tools/quick-settings/com.bwx.bequick.flashlight.htm Agora você pode usar este ligação. [Atualização: 14/9/2012 Este link está quebrado agora]
Atualização 1
Outro código de código aberto: http://code.google.com/p/torch/source/browse/
Atualização 2
Exemplo que mostra como ativar o LED em um Motorola Droid: http://code.google.com/p/droidled/
Outro código-fonte aberto:
http://code.google.com/p/covedesigndev/
http://code.google.com/p/search-light/
Atualização 3 (Widget para ligar / desligar o led da câmera)
Se você deseja desenvolver um widget que liga / desliga o led da câmera, deve consultar a minha resposta Widget para ativar / desativar a lanterna da câmera no android .
Atualização 4
Se você deseja definir a intensidade da luz que sai do LED da câmera, pode consultar Posso alterar a intensidade do LED de um dispositivo Android? post completo. Observe que apenas os dispositivos HTC raiz suportam esse recurso.
** Problemas:**
Também existem alguns problemas ao ligar / desligar a lanterna. por exemplo. para os dispositivos que não possuem FLASH_MODE_TORCH
ou mesmo se tiverem, a lanterna não liga etc.
Normalmente, a Samsung cria muitos problemas.
Você pode consultar os problemas na lista abaixo:
Use a lanterna da câmera no Android
Ligue / desligue o LED da câmera / luz do flash no Samsung Galaxy Ace 2.2.1 e Galaxy Tab
Pela minha experiência, se seu aplicativo foi projetado para funcionar na orientação retrato e paisagem, você precisa declarar a variável
cam
como estática. Caso contrário,onDestroy()
que é chamado de alternância de orientação, a destrói, mas não libera a Câmera, portanto não é possível reabri-la novamente.para manifestar eu tive que colocar essa linha
em http://developer.android.com/reference/android/hardware/Camera.html
as linhas sugeridas acima não estavam funcionando para mim.
fonte
you need to declare the variable cam as static
Camera
Classe emAndroidStudio
prestar atenção a serandroid.hardware
classe ...Na API 23 ou superior (Android M, 6.0)
EDIÇÃO ADICIONAL
As pessoas ainda votaram na minha resposta, então eu decidi postar código adicional Esta foi a minha solução para o problema no passado:
fonte
Eu obtive a luz AutoFlash com três etapas abaixo simples.
No código da sua câmera, faça isso.
Build + Run -> Agora vá para Dim light area e Snap photo, você deve obter a luz do flash automático se o dispositivo suportar.
fonte
O Android Lollipop introduziu a API camera2 e substituiu a API da câmera anterior. No entanto, o uso da API reprovada para ativar o flash ainda funciona e é muito mais simples do que usar a nova API.
Parece que a nova API foi projetada para uso em aplicativos dedicados de câmera com todos os recursos e que seus arquitetos não consideraram casos de uso mais simples, como acender a lanterna. Para fazer isso agora, é necessário obter um CameraManager, criar uma CaptureSession com uma superfície fictícia e, finalmente, criar e iniciar um CaptureRequest. Manipulação de exceção, limpeza de recursos e retornos de chamada longos incluídos!
Para ver como ativar a lanterna no Lollipop e mais recentes, dê uma olhada no FlashlightController no projeto AOSP (tente encontrar as APIs de uso mais recentes e antigas que foram modificadas). Não se esqueça de definir as permissões necessárias.
O Android Marshmallow finalmente introduziu uma maneira simples de ligar o flash com o setTorchMode .
fonte
Código completo para Android Flashlight App
Manifesto
XML
MainActivity.java
fonte
Existem diferentes maneiras de acessar o Flash da câmera em diferentes versões do Android. Poucas APIs pararam de funcionar no Lollipop e depois foram alteradas novamente no Marshmallow. Para superar isso, criei uma biblioteca simples que tenho usado em alguns dos meus projetos e está dando bons resultados. Ainda está incompleto, mas você pode tentar verificar o código e encontrar as peças que faltam. Aqui está o link - NoobCameraFlash .
Se você deseja integrar apenas no seu código, use gradle para isso. Aqui estão as instruções (extraídas diretamente do Leia-me) -
Etapa 1. Adicione o repositório do JitPack ao seu arquivo de construção. Adicione-o em seu root build.gradle no final dos repositórios:
Etapa 2. Adicione a dependência
Uso
Inicialize o
NoobCameraManager
singleton.Você pode opcionalmente definir o nível de log para o log de depuração. O log usa a biblioteca LumberJack . O LogLevel padrão é
LogLevel.None
Depois disso, basta ligar para o singleton para ativar ou desativar o flash da câmera.
Também é fácil alternar o Flash
fonte
You have to take care of the runtime permissions to access Camera yourself, before initializing the NoobCameraManager. In version 0.1.2 or earlier we used to provide support for permissions directly from the library, but due to dependency on the Activity object, we have to remove it.
Eu implementei essa função no meu aplicativo por meio de fragmentos usando o SurfaceView. O link para esta pergunta do stackoverflow e sua resposta podem ser encontrados aqui
Espero que isto ajude :)
fonte
No Marshmallow e acima, o `setTorchMode () 'do CameraManager parece ser a resposta. Isso funciona para mim:
fonte
Tente isso.
fonte
Você também pode usar o seguinte código para desligar o flash.
fonte