Professional Documents
Culture Documents
Introduo
O objetivo deste projeto realizar captura de imagem com a cmera
do dispositivo, armazen-la no carto SD e, por fim, visualiz-la.
Neste exemplo, iremos requisitar ao prprio aplicativo da cmera para
que a foto seja capturada usando um Intent. Esta uma forma simples e
prtica de incluir esta funcionalidade no seu aplicativo.
As imagens capturadas devem ser armazenadas no carto de memria
para evitar que o espao de armazenamento interno no fique
comprometido.
Introduo
Por padro, existem dois diretrios que podemos utilizar para salvar as
imagens capturadas.
O getExternalStoragePublicDirectory, da classe Environment, que
retorna um diretrio compartilhado por todas as aplicaes e o
recomendado para o armazenamento de fotos e vdeos. Como este
diretrio no est associado ao aplicativo que gravou a imagem, quando
este desinstalado, os dados no so perdidos.
O outro diretrio que pode ser utilizado o obtido atravs de
Context.getExternalFilesDir, que retorna um diretrio associado ao
aplicativo.
Aplicao de exemplo
Crie um novo projeto chamado ExemploCamera01 com um pacote
chamado pdm.exercicios.testes e marque a opo para criar a Activity
principal.
Aplicao de exemplo
Abra o arquivo de cdigo da Activity. Declare uma varivel privada,
esttica, final, do tipo int chamada CAPTURAR_IMAGEM. Inicialize-a
com o valor 1.
Aplicao de exemplo
Declare uma varivel do tipo String chamada nomeImagem e
inicialize-a com o seguinte valor:
Aplicao de exemplo
Declare uma varivel do tipo Intent chamada camera e inicialize-a
com uma nova Intent, passando como parmetro do construtor o valor
MediaStore.ACTION_IMAGE_CAPTURE.
Isso far com que a Intent criada abra o aplicativo de cmera do celular
para capturar imagens.
Na sequncia, execute o mtodo putExtra da varivel camera,
passando dois parmetros: MediaStore.EXTRA_OUTPUT e arquivo.
Isso far com que a Intent grave o arquivo de imagem capturado no
carto externo.
Aplicao de exemplo
Para terminar o mtodo capturar, execute o mtodo
startActivityForResult, passando dois parmetros: camera e
CAPTURAR_IMAGEM.
Aplicao de exemplo
Crie um mtodo protegido sem retorno chamado onActivityResult que
espera trs parmetros: requestCode do tipo int, resultCode do
tipo int e data do tipo Intent.
Aplicao de exemplo
Crie um mtodo privado sem retorno chamado adicionarNaGaleria
que no espera a passagem de parmetros. Dentro dele, faa:
Declare uma Intent chamada galeria que recebe um novo objeto
da classe Intent passando como parmetro do construtor o valor
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE.
Em seguida, execute o mtodo setData da varivel galeria,
passando como parmetro a varivel arquivo.
Por fim, execute o mtodo sendBroadcast da varivel this,
passando como parmetro a varivel galeria. Isso far com que o
aplicativo envie uma mensagem (broadcast) para o equipamento
efetivamente armazenar a imagem capturada no dispositivo.
Aplicao de exemplo
Crie o mtodo visualizar, o qual chamado diretamente pela
Activity. Lembre-se de passar um parmetro do tipo View.
Declare uma Intent chamada imagem e inicialize-a com um novo
objeto da classe Intent, passando como parmetro do construtor
Intent.ACTION_VIEW. Essa Intent apenas abrir o arquivo de imagem no
formato de visualizao.
Aplicao de exemplo
Infelizmente, o emulador padro 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.
Exerccio avaliativo
Utilizando os conhecimentos adquiridos no projeto sobre
Notificaes, altere o projeto de captura de imagem para que uma
notificao seja gerada assim que a captura da imagem for confirmada.