A nova API camera2 me confunde. Quero desenvolver um aplicativo (para APIs do Android 10 - 21) que use a câmera do dispositivo. Conforme declarado aqui , devo usar a API "Câmera".
No entanto, quando tento adicionar a API "Câmera" (android.hardware.Camera) aos recursos de usuário do manifesto, ela é marcada como obsoleta . Por outro lado, não posso alterá-lo para a API "camera2" (android.hardware.camera2), pois é compatível apenas com a API Android 21+ (Android 5 - Lollipop) - também o vincularia, mas só posso adicionar 2 links.
Não só quero que meu aplicativo seja executado em versões mais antigas do Android, mas também a mais nova ...
Coloque todos os métodos da câmera necessários em uma interface e crie uma instância de câmera como esta
Dessa forma, você terá tudo dividido e isso facilitará sua vida.
Palavra de conselho - a vida com a camera2 não é tão boa assim. Os vendedores ainda fazem implementações ruins e, portanto, você terá que adicionar muitas condições e soluções alternativas.
Exemplo 1 - O S6 relata que não suporta flash :) Exemplo 2 - Um dispositivo LG reporta uma lista dos tamanhos de imagem suportados - no entanto, nem todos eles são realmente suportados !!
fonte
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraID); if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY)...
e escolher a API antiga, se for verdadeira.Para dar suporte à API que você deseja, use o código abaixo. Apenas determine os nomes apropriados correspondentes aos níveis da API. Por exemplo, a API 21 é LOLLIPOP e a API 15 é ICE_CREAM_SANDWICH_MR1.
fonte
No entanto, o que o Google recomenda usar o Camera2 Api> = 21, mas você pode ter problemas com as configurações manuais.
Quando você precisar implementar o aplicativo para tirar uma foto com o Modo de configuração automática, ele funcionará bem. Mas! Se for necessário criar um aplicativo com a implementação do Modo de configuração manual, para dispositivos com API> = 21, verifique primeiro o NÍVEL DE HARDWARE suportado:
Selecione a câmera (frontal, frontal), obtenha as características e verifique o NÍVEL DE HARDWARE.
CameraCharacteristics representa os próximos níveis suportados: LIMITED, FULL, LEGACY, LEVEL_3, EXTERNAL.
Em um nível alto, os níveis são:
Os dispositivos LEGACY operam em um modo de compatibilidade com versões anteriores para dispositivos Android mais antigos e possuem recursos muito limitados.
Os dispositivos LIMITADOS representam o conjunto de recursos da linha de base e também podem incluir recursos adicionais que são subconjuntos de COMPLETO.
Os dispositivos COMPLETOS também oferecem suporte ao controle manual por quadro das configurações de sensor, flash, lente e pós-processamento e captura de imagem a uma taxa alta.
Os dispositivos LEVEL_3 também oferecem suporte ao reprocessamento YUV e captura de imagem RAW, além de configurações adicionais de fluxo de saída.
Se você obteve o nível de supressão LEGACY , use a Camera Api antiga .
fonte
Use a anotação de suporte
para evitar checar
fonte
Plz read link Suporte à versão da câmera Eles afirmam que ... O
Camera API1
Android 5.0 descontinuou o Camera API1, que continua a ser eliminado à medida que o desenvolvimento da nova plataforma se concentra no Camera API2. No entanto, o período de eliminação gradual será longo e as versões do Android continuarão a oferecer suporte aos aplicativos Camera API1 por algum tempo. Especificamente, o suporte continua para:
fonte
Eu descobri que a melhor opção é criar duas atividades. Use a maneira geral de verificar a API do dispositivo atual
Dessa forma, não preciso ter muita confusão quando olhar para trás o código. O código é fácil de modificar, pois foi separado.
fonte