Trabalhando com câmera no Android

13
Capturando e visualizando imagens

description

Trabalhando com câmera no Android

Transcript of Trabalhando com câmera no Android

Page 1: Trabalhando com câmera no Android

Capturando e visualizando imagens

Page 2: Trabalhando com câmera no Android

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.

Page 3: Trabalhando com câmera no Android

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.

Page 4: Trabalhando com câmera no Android

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”.

Page 5: Trabalhando com câmera no Android

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.

Page 6: Trabalhando com câmera no Android

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.

Page 7: Trabalhando com câmera no Android

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.

Page 8: Trabalhando com câmera no Android

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.

Page 9: Trabalhando com câmera no Android

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.

Page 10: Trabalhando com câmera no Android

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.

Page 11: Trabalhando com câmera no Android

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”.

Page 12: Trabalhando com câmera no Android

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.

Page 13: Trabalhando com câmera no Android

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.