Câmera Android

Neste artigo, vamos nos aprofundar no mundo da câmera Android e guiá-lo pelo processo de implementação da câmera em um aplicativo Android, incluindo hardware da câmera, API da câmera, intenções da câmera, permissões da câmera, configurações da câmera e melhores práticas para capturar alta fotos e vídeos de qualidade.

Se você possui um dispositivo Android , provavelmente está familiarizado com o aplicativo de câmera integrado que o acompanha. Este aplicativo permite que você tire fotos e grave vídeos com facilidade. No entanto, como desenvolvedor de aplicativos, você pode querer adicionar a funcionalidade de câmera personalizada ao seu aplicativo.

É aqui que a API da câmera do Android é útil. Com a API da câmera, você pode acessar o hardware da câmera do dispositivo e capturar fotos ou vídeos diretamente do seu aplicativo.



Compreendendo o hardware da câmera

Antes de mergulhar na API da câmera, é essencial entender o hardware da câmera em um dispositivo Android.

Os dispositivos Android normalmente têm dois tipos de câmeras:

  1. A câmera traseira (também conhecida como câmera principal).
  2. A câmera frontal (também conhecida como câmera selfie ou câmera secundária).

Essas câmeras podem ter especificações diferentes, como resolução, abertura, distância focal e suporte a flash, o que pode impactar na qualidade das imagens ou vídeos capturados.


Usando a API da câmera

A Camera API é um conjunto de classes e interfaces fornecidas pelo Android para interagir com o hardware da câmera e capturar imagens ou vídeos. A API da câmera permite controlar vários aspectos da câmera, como definir os parâmetros da câmera, visualizar a saída da câmera, capturar imagens ou vídeos e manipular eventos da câmera.

Aqui estão alguns dos métodos de API da câmera comumente usados ​​no Android:

Métodos Visão geral
open(int cameraId) Este método abre uma conexão com a câmera com o ID fornecido. A ID da câmera pode ser 0 para câmera traseira, 1 para câmera frontal ou qualquer outro valor se houver mais de duas câmeras no dispositivo.
setPreviewDisplay(suporte de SurfaceHolder) Este método define o SurfaceHolder a ser usado para exibir a visualização da câmera ao vivo.
startPreview() Este método inicia a visualização da câmera ao vivo.
stopPreview() Este método interrompe a visualização da câmera ao vivo.
setPreviewCallback(Retorno de chamada PreviewCallback) Esse método define um retorno de chamada a ser invocado para cada quadro de visualização, além de exibi-los na tela.
takePicture (obturador ShutterCallback, PictureCallback raw, PictureCallback jpeg) Este método captura uma imagem estática da câmera. O ShutterCallback é chamado quando a imagem está prestes a ser tirada, o PictureCallback é chamado quando os dados brutos da imagem estão disponíveis e o PictureCallback é chamado quando os dados da imagem compactada JPEG estão disponíveis.
setParameters(Camera.Parameters params) Este método define os parâmetros da câmera, como tamanho da imagem, modo de flash, modo de foco, etc.
getParameters() Este método retorna os parâmetros atuais da câmera.
autoFocus(AutoFocusCallback cb) Este método inicia uma operação de foco automático. O resultado da operação será retornado no AutoFocusCallback.
cancelarAutoFoco() Este método cancela a operação de foco automático atual.
setErrorCallback(ErrorCallback cb) Esse método define o retorno de chamada a ser invocado quando ocorre um erro.
liberar() Este método libera os recursos da câmera. Depois de chamar esse método, o objeto câmera não deve mais ser usado.

Para usar a API da câmera em seu aplicativo Android, você precisa primeiro obter a permissão da câmera do usuário.


Definir permissões da câmera

A permissão da câmera é uma permissão confidencial e requer o consentimento explícito do usuário.

Você pode solicitar permissão de câmera usando o sistema de permissão do Android e lidar com retornos de chamada de permissão para garantir o tratamento adequado de permissão em seu aplicativo.

Depois de obter a permissão da câmera, você pode inicializar o hardware da câmera, definir os parâmetros da câmera e iniciar a visualização da câmera.

A visualização da câmera é um feed ao vivo da câmera que mostra o que a câmera está capturando em tempo real na tela do dispositivo.

Você também pode capturar imagens ou gravar vídeos usando a API da câmera e salvá-los no armazenamento do dispositivo ou processá-los em seu aplicativo.

Para usar a câmera em seu aplicativo, você precisa adicionar permissões ao manifesto do aplicativo.

Você precisará adicionar as seguintes permissões para a funcionalidade da câmera:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

Adicionamos essas permissões ao nosso manifesto de aplicativo para habilitar a funcionalidade da câmera:

a primeira linha concede acesso à câmera do dispositivo e as próximas duas linhas confirmam que o dispositivo possui uma funcionalidade de câmera e foco automático.


Criar layout de visualização da câmera

Para exibir a saída da câmera na tela, você precisa criar um layout para a visualização da câmera em seu aplicativo.

Você pode criar um arquivo chamado “ camera_preview.xml ” e incluir o seguinte código:

<?xml version="1.0" encoding="utf-8"?>
<SurfaceView
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent" />

Nosso arquivo de layout chamado camera_preview.xml contém um SurfaceView , que usaremos para exibir a visualização da câmera.


Criar classe de visualização da câmera

Para manipular a visualização da câmera, você precisa criar uma classe chamada CameraPreview .

Aqui está um exemplo de implementação que você pode usar:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;

public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
Log.d("CameraPreview", "Error setting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mHolder.getSurface() == null) {
return;
}

try {
mCamera.stopPreview();
} catch (Exception e) {
Log.d("CameraPreview", "Error stopping camera preview: " + e.getMessage());
}

try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d("CameraPreview", "Error starting camera preview: " + e.getMessage());
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
}
}

Nós, como desenvolvedores, estendemos a classe SurfaceView e implementamos a interface SurfaceHolder.Callback para criar uma classe chamada CameraPreview . A classe CameraPreview contém um objeto Camera que nos permite controlar o hardware da câmera.

Dentro do construtor, obtemos o SurfaceHolder do SurfaceView e anexamos um retorno de chamada a ele. Também definimos o tipo de SurfaceHolder como SURFACE_TYPE_PUSH_BUFFERS para garantir que seja compatível com versões mais antigas do Android.

O método surfaceCreated() é chamado quando o SurfaceView é criado. Nesse método, definimos a visualização da câmera para exibição no SurfaceView.

O método surfaceChanged() é chamado quando o SurfaceView muda de tamanho ou formato. Usamos esse método para interromper a visualização da câmera e reiniciá-la com os novos parâmetros.


Agora capture uma imagem

Uma vez configurada a visualização, você pode usar a instância da câmera para capturar uma imagem.

Aqui está um exemplo de como capturar uma imagem:

private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// process the captured image data
}
};

Para capturar uma imagem, precisamos chamar o método takePicture da instância da câmera. Podemos definir um PictureCallback para processar os dados da imagem capturada.

O parâmetro data contém os dados brutos da imagem em uma matriz de bytes, que podemos processar no método onPictureTaken .

Aqui está um exemplo:

mCamera.takePicture(null, null, mPicture);

Passamos null para os dois primeiros parâmetros no código acima, pois não precisamos especificar nenhuma configuração para a imagem capturada. O terceiro parâmetro era a instância PictureCallback que seria chamada quando a imagem fosse capturada.


Lidando com Erros da Câmera

Para lidar com erros ao trabalhar com a câmera, é essencial conhecer os erros comuns que você pode encontrar.

Você pode se deparar com os seguintes erros:

Erros Visão geral
A câmera não está disponível Esse erro ocorre quando outro aplicativo está usando a câmera ou quando a câmera não está disponível por algum outro motivo.
A visualização da câmera não está disponível Este erro ocorre quando a visualização da câmera não pode ser iniciada.
O foco automático da câmera falhou Este erro ocorre quando a câmera não consegue focar.

Para lidar com esses erros, você pode implementar a interface Camera.ErrorCallback .

private Camera.ErrorCallback mErrorCallback = new Camera.ErrorCallback() {
@Override
public void onError(int error, Camera camera) {
Log.e(TAG, "Camera error: " + error);
}
};

Para lidar com erros em nossa implementação de câmera, podemos definir uma interface ErrorCallback conforme mostrado no código anterior.

Essa interface registra a mensagem de erro no console. No entanto, você pode implementar sua própria lógica de tratamento de erros neste retorno de chamada conforme sua necessidade.

Para definir o retorno de chamada de erro, precisamos chamar o método setErrorCallback da instância da câmera da seguinte maneira:

mCamera.setErrorCallback(mErrorCallback);

Agora feche a câmera

Para liberar os recursos da câmera, você precisa chamar o método release() da instância Camera.

Este método liberará os recursos de hardware da câmera e os disponibilizará para outros aplicativos.

Aqui está um exemplo de como liberar a câmera em seu código:

private void releaseCamera() {
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}

Liberamos os recursos da câmera chamando o método release da instância da câmera no código acima.

Também definimos a instância da câmera como nula para garantir que ela seja liberada corretamente.


Vantagens da câmera Android

Usar a câmera em um aplicativo Android traz várias vantagens para você como usuário:

  • Ao usar a câmera, os desenvolvedores podem criar experiências de usuário mais envolventes e envolventes para você. Você pode tirar fotos, gravar vídeos e usar recursos de realidade aumentada para tornar seu aplicativo mais divertido e interativo.
  • Com a onipresença dos smartphones, você sempre tem uma câmera no bolso. Ao usar a câmera em seu aplicativo, você pode aproveitar essa conveniência e fornecer uma maneira fácil de capturar imagens e vídeos.
  • A câmera pode ser usada para uma variedade de aplicações, desde escanear códigos de barras e documentos até reconhecer rostos e adicionar objetos virtuais ao mundo real. Essa versatilidade o torna uma ferramenta valiosa para muitos setores e aplicações.
  • A API da câmera no Android é fácil de usar e acessível a desenvolvedores de todos os níveis. Isso torna mais fácil para os desenvolvedores incorporar a funcionalidade da câmera em seu aplicativo, independentemente do nível de experiência.
  • A API da câmera no Android pode ser integrada a outras APIs e serviços, como serviços baseados em localização e armazenamento em nuvem. Essa integração permite ainda mais funcionalidade e flexibilidade em seu aplicativo.
  • A câmera é uma tecnologia em constante evolução, com novos recursos e capacidades sendo adicionados o tempo todo. Ao incorporar a câmera em seu aplicativo, você pode aproveitar esses novos recursos e fornecer funcionalidades inovadoras e de ponta.

Melhores Práticas

Capturar fotos e vídeos de alta qualidade é essencial para garantir uma ótima experiência do usuário em seu aplicativo.

Aqui estão algumas práticas recomendadas a serem consideradas ao trabalhar com a câmera do Android:

  1. A visualização da câmera é o feed ao vivo da câmera que os usuários veem na tela. É importante otimizar a visualização da câmera para um desempenho suave e responsivo. Você pode usar técnicas como surfaceView, textureView e API camera2 para visualização eficiente da câmera.
  2. Os dispositivos Android podem ser usados ​​em diferentes orientações, por isso é crucial lidar corretamente com a orientação da câmera em seu aplicativo. Você pode usar a orientação do sensor, a rotação da tela e a rotação da câmera para garantir que a mídia capturada seja exibida corretamente, independentemente da orientação do dispositivo.
  3. Os parâmetros da câmera, como modo de foco, modo de flash, compensação de exposição e balanço de branco, podem afetar bastante a qualidade da mídia capturada. Experimente diferentes parâmetros da câmera para obter os resultados desejados com base nas condições de iluminação e no assunto da foto ou do vídeo.
  4. A API da câmera do Android permite controlar a qualidade das imagens e vídeos capturados. Você pode definir o nível de compactação da imagem, taxa de bits de vídeo, resolução e taxa de quadros para otimizar a qualidade da mídia capturada em seu aplicativo.
  5. A câmera pode gerar vários eventos e erros, como foco automático, retorno de chamada do obturador e erros da câmera. É importante lidar com esses eventos e erros adequadamente em seu aplicativo para fornecer uma experiência de câmera suave e sem erros aos usuários.
  6. Imagens e vídeos capturados precisam ser armazenados adequadamente no armazenamento do dispositivo para garantir que estejam acessíveis e possam ser usados ​​em seu aplicativo. Você pode usar práticas padrão de armazenamento de arquivos, como criar uma pasta dedicada para mídia, usar convenções adequadas de nomenclatura de arquivo e gerenciar o espaço de armazenamento com eficiência.
  7. Os dispositivos Android vêm em vários tamanhos, resoluções e recursos de câmera. É crucial testar minuciosamente a funcionalidade da câmera em diferentes dispositivos e orientações para garantir que ela funcione bem em diferentes dispositivos e tamanhos de tela.

Conclusão

Dominar a API Android Camera é essencial para criar aplicativos que exigem a funcionalidade da câmera. Ao seguir as práticas recomendadas, como otimizar a visualização da câmera, lidar com permissões e configurações da câmera, implementar controle de qualidade de imagem e vídeo e lidar com eventos e erros da câmera, você pode criar aplicativos que capturam fotos e vídeos de alta qualidade e fornecem uma experiência de câmera perfeita para seus usuários. Lembre-se de testar exaustivamente seu aplicativo em diferentes dispositivos e orientações para garantir que funcione bem em vários dispositivos Android . Boa captura!

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone