Como criar um aplicativo Android com câmera (Android 6+)

Android SDK

Como criar um aplicativo Android com câmera (Android 6+)

Luiz Duarte
Escrito por Luiz Duarte em 19/07/2017
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Atualizado em 19/07/17 com suporte a Android 6+

No post de hoje vou ensinar como criar um app Android onde você pode “invocar” o recurso de câmera do smartphone e depois ter acesso à foto retirada para fazer o que quiser com ela. Tenho certeza que lhe pode ser útil para algum projeto que esteja fazendo ou que vá fazer um dia.

Se você nunca fez um app antes, sugiro dar uma olhada primeiro neste tutorial que cobre todo o básico!

Há alguns anos atrás eu desenvolvi um app para uma campanha publicitária da LG, para o lançamento de um novo modelo de smartphone, acho que era o L2 ou algo assim. Esse app se chamava “Bem na Foto” e foi solicitado pela LG para ser usado nos pontos de venda visando mostrar como a câmera desse aparelho novo era boa. Ele era bem simples: o usuário abria o app, tirava uma foto, escolhia uma moldura para colocar a foto dentro e publicava nas redes sociais. Mesmo simples, me rendeu bastante dinheiro para um projeto que levei poucos dias para deixar 100%.

Vamos ver nesse post:

A tela inicial

Na tela inicial não teremos nada de especial, exceto um botão para tirar uma nova foto, sendo assim, quando você for criar seu projeto, escolha o template Basic Activity (o mesmo que usamos neste tutorial de CRUD) que já vem com um FloatingActionButton e apenas adicione uma ImageView que exibirá a foto tirada, dentro do content_main.xml:

Note que eu não escrevi todos esses código aí em cima, apenas arrastei o ImageView pro layout e usei o recurso Infer Constraints do ContraintLayout. Já no activity_main.xml, apenas mude o ícone do FloatingActionButton para ser uma câmera ao invés do envelope tradicional, como fiz no código abaixo:

O seu layout deve se parecer com esse (a ImageView está transparente pois não tiramos foto ainda):

Layout do app

Na classe Java que vai responder por esta tela, chamada de MainActivity, existe um código pronto para o clique do FloatingActionButton, que por padrão apenas exibe uma SnackBar, mude-o para que chame o método correto, conforme abaixo:

Note que neste código chamamos um método getPermissions(); que ainda não existe e que teremos de criar no próximo passo.

Configurando permissões

Neste tutorial usaremos os recursos de câmera e de armazenamento do smartphone, logo, precisamos que o Android nos forneça tais permissões. Além disso, precisamos exigir que este app somente possa ser instalado em dispositivos com câmera. O trecho de código abaixo deve ser colocado no arquivo AndroidManifest.xml, logo acima da tag application:

Até a versão 5 do Android isso é o suficiente para garantir que teremos as permissões necessárias. No entanto, a partir da versão 6 o controle de permissões mudou e agora devemos também solicitar via código, no momento em que vamos usar o recurso em questão.

Para tanto, vamos criar o método getPermissions() como abaixo (bem parecido com o que usamos no tutorial de app com GPS) e o método onRequestPermissionsResult() que será disparado automaticamente quando o usuário tiver interagido com o dialog de sistema que pedirá a permissão para ele:

Após o usuário fornecer ou não permissão ao aplicativo, ele irá disparar o evento onRequestPermissionsResult, também exibido no código anterior, que dispara o método dispatchTakePictureIntent() se tiver as permissões de uso da câmera e do SD ou um alerta, caso contrário. Da mesma forma, em usos futuros do app, já com a permissão concedida, esse passo não acontece mais, como mostrado no else do método getPermissions().

Note que este método dispatchTakePictureIntent() não existe ainda, criaremos no próximo passo.

Curso React Native

Chamando a câmera

Para invocar a câmera do dispositivo nós temos que criar um método com a intenção de usar a câmera que, quando a foto for tirada, irá retornar à activity de origem, salvar a foto e exibir a mesma.

Ufa, é um trabalho e tanto!

Temos dois métodos no exemplo de código acima, o dispatchTakePictureIntent que inicializa a câmera, e salva a foto tirada no cartão SD e o evento onActivityResult que é disparado automaticamente quando a foto termina de ser tirada para exibi-la no ImageView.

Quando for mandar rodar no simulador, lembre-se de se certificar se ele possui hardware de câmera na tela de configurações dele (caso não possua, edite-o). Na imagem abaixo você confere a foto tirada, usando o modo “emulated” de câmera no simulador do Android.

Foto tirada

Na sequência você pode colocar botões nessa tela para editar a imagem, por exemplo, ou para exclui-la. Com alguns códigos Java você pode publicá-la em redes sociais ou mesmo envia-la por email.

Mas isso fica para a sua criatividade ou para posts futuros, não é mesmo?! 😉

Curso Beholder

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

10 Replies to “Como criar um aplicativo Android com câmera (Android 6+)”

Natanael Souza

Boa noite
como faço para contratar o seu serviço
preciso criar um app para android

Luiz Fernando Jr

Bom dia Natanael, me manda um email pelo formulário de contato, para que possamos conversar melhor.

Ave Nasci

Tentei fazer seu exemplo e deu esse erro:
Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera

Luiz Fernando Jr

Você deve estar rodando em um simulador com Android 6 ou superior, certo? Neste caso a forma de solicitar a permissão é diferente, não basta apenas colocar no manifesto, tem de pedir via código, no momento que for usar. Eu vou atualizar esse post assim que possível, mas no post sobre GPS fala de como pedir essa permissão em tempo real.

Ave Nasci

Isso mesmo. estou com android 6 e android 7.1. vou aguardar sua atualização. Parabéns pelo Blog. Alta qualidade

Luiz Fernando Jr

Resolvido. Confere se agora vai funcionar pra você? Refiz todo tutorial do zero, ficou até mais simples.

Plínio Victor

android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/jkkkk_FF.jpg exposed beyond app through ClipData.Item.getUri()
?

Ave Nasci

Luiz,
No texto você deixa claro que irar guardar a imagem no cartão SD. Caso Meu dispositivo não tenha cartão. Como será seu funcionamento ?

Luiz Fernando Jr

Onde diz Environment.getExternalStorage… troque por Environment.getDataDirectory()