Trabalhando com câmera no Android
-
Upload
eduardo-cardoso-melo -
Category
Documents
-
view
30 -
download
0
description
Transcript of Trabalhando com câmera no Android
Capturando e visualizando imagens
Introdução
• O objetivo deste projeto é realizar captura de imagem com a câmera do dispositivo, armazená-la no cartão SD e, por fim, visualizá-la.
• Neste exemplo, iremos requisitar ao próprio aplicativo da câmera para que a foto seja capturada usando um Intent. Esta é uma forma simples e prática de incluir esta funcionalidade no seu aplicativo.
• As imagens capturadas devem ser armazenadas no cartão de memória para evitar que o espaço de armazenamento interno não fique comprometido.
Introdução
• Por padrão, existem dois diretórios que podemos utilizar para salvar as imagens capturadas.
• O getExternalStoragePublicDirectory, da classe Environment, que retorna um diretório compartilhado por todas as aplicações e é o recomendado para o armazenamento de fotos e vídeos. Como este diretório não está associado ao aplicativo que gravou a imagem, quando este é desinstalado, os dados não são perdidos.
• O outro diretório que pode ser utilizado é o obtido através de Context.getExternalFilesDir, que retorna um diretório associado ao aplicativo.
• Neste projeto iremos utilizar a primeira forma.
Aplicação de exemplo
• Crie um novo projeto chamado “ExemploCamera01” com um pacote chamado “pdm.exercicios.testes” e marque a opção para criar a Activity principal.
• Na tela inicial, inclua dois botões para capturar e visualizar a imagem salva. Quando clicado, o primeiro deverá chamar o método “capturar” e o segundo deverá chamar o método “visualizar”.
Aplicação de exemplo
• Abra o arquivo de código da Activity. Declare uma variável privada, estática, final, do tipo int chamada “CAPTURAR_IMAGEM”. Inicialize-a com o valor 1.
• Declare outra variável privada do tipo “Uri” chamada “arquivo”.
• Declare o método público “capturar” (chamado pela Activity) e faça as implementações seguintes:
• Declare uma variável do tipo “File” chamada “diretorio”. Inicialize-a com o seguinte valor:
• Essa variável receberá o diretório público do aparelho onde as imagens gerais são salvas.
Aplicação de exemplo
• Declare uma variável do tipo String chamada “nomeImagem” e inicialize-a com o seguinte valor:
• Desta forma, o nome do arquivo será sempre o horário em que a imagem foi capturada, evitando duplicidades.
• Em seguida, faça com que a variável “arquivo” receba um novo arquivo criado no diretório especificado.
Aplicação de exemplo
• Declare uma variável do tipo “Intent” chamada “camera” e inicialize-a com uma nova Intent, passando como parâmetro do construtor o valor MediaStore.ACTION_IMAGE_CAPTURE.
• Isso fará com que a Intent criada abra o aplicativo de câmera do celular para capturar imagens.
• Na sequência, execute o método “putExtra” da variável “camera”, passando dois parâmetros: MediaStore.EXTRA_OUTPUT e arquivo.
• Isso fará com que a Intent grave o arquivo de imagem capturado no cartão externo.
Aplicação de exemplo
• Para terminar o método “capturar”, execute o método “startActivityForResult”, passando dois parâmetros: camera e CAPTURAR_IMAGEM.
• Este método executa uma Activity e retorna um resultado para a classe que a chamou. No caso, utilizamos a constante CAPTURAR_IMAGEM com o objetivo de informar um código para identificar a solicitação.
• Quando o aplicativo da câmera tirar a foto e o usuário confirmar a captura, a Activity da câmera será finalizada com um resultado e o método onActivityResult da Activity principal será invocado. Portanto, precisamos codificar este método.
• Neste método, faremos uma checagem para saber se o resultado é para a solicitação que foi feita com o código CAPTURAR_IMAGEM.
Aplicação de exemplo
• Crie um método protegido sem retorno chamado onActivityResult que espera três parâmetros: “requestCode” do tipo “int”, “resultCode” do tipo “int” e “data” do tipo “Intent”.
• Dentro do método faça a seguinte codificação:
• Este método está verificando se o código de requisição é o de captura de imagem e se o resultado da ação foi Ok. Caso seja, o método “adicionarNaGaleria()” é chamado para salvar o arquivo na galeria de imagens do celular.
Aplicação de exemplo
• Crie um método privado sem retorno chamado “adicionarNaGaleria” que não espera a passagem de parâmetros. Dentro dele, faça:
• Declare uma “Intent” chamada “galeria” que recebe um novo objeto da classe “Intent” passando como parâmetro do construtor o valor Intent.ACTION_MEDIA_SCANNER_SCAN_FILE.
• Em seguida, execute o método “setData” da variável “galeria”, passando como parâmetro a variável “arquivo”.
• Por fim, execute o método “sendBroadcast” da variável “this”, passando como parâmetro a variável “galeria”. Isso fará com que o aplicativo envie uma mensagem (broadcast) para o equipamento efetivamente armazenar a imagem capturada no dispositivo.
Aplicação de exemplo
• Crie o método “visualizar”, o qual é chamado diretamente pela Activity. Lembre-se de passar um parâmetro do tipo “View”.
• Declare uma Intent chamada “imagem” e inicialize-a com um novo objeto da classe “Intent”, passando como parâmetro do construtor Intent.ACTION_VIEW. Essa Intent apenas abrirá o arquivo de imagem no formato de visualização.
• Em seguida, execute o método “setDataAndType” da variável “imagem”, passando dois parâmetros: a variável “arquivo” e a string “image/jpg”. Assim estamos dizendo que a imagem está armazenada na variável “arquivo” e possui a extensão “jpg”.
• Por fim, execute o método “startActivity”, passando como parâmetro a variável “imagem”.
Aplicação de exemplo
• Infelizmente, o emulador padrão do Eclipse gera erros no momento da captura de imagens, mesmo utilizando-se a webcam do computador.
• Neste caso, você terá que testar o aplicativo diretamente em um aparelho com Android.
• Para isso, você pode gerar um APK do aplicativo (opção “Export”) ou conectar o seu celular no computador e usá-lo diretamente como um emulador virtual.
Exercício avaliativo
• Utilizando os conhecimentos adquiridos no projeto sobre “Notificações”, altere o projeto de captura de imagem para que uma notificação seja gerada assim que a captura da imagem for confirmada.
• Quando o usuário clicar na notificação, o aplicativo deverá exibir a imagem capturada anteriormente.