Capítulo 07: Câmera e Arquivos
M.Sc. Márcio Palheta
Instrutor
● Programador desde 2000
● Aluno de doutorado
● Mestre em informática pelo ICOMP/UFAM
● Especialista em aplicações WEB – FUCAPI
● sites.google.com/site/marciopalheta
M.Sc. Márcio Palheta
3/41
Agenda
● Arquivos
● Usar Intent implícita da Câmera do Device
● Passagem de parâmetros para a Câmera
● Captura de imagens da câmera
● Recuperar resultados de uma Activity
● Carregar imagens de arquivos salvos no device
● A imagem é perdida quando giramos a tela. E agora?
M.Sc. Márcio Palheta
4/41
Agora queremos completar o cadastro
● Para completar o cadastro do aluno, queremos usar a câmera do device para capturar sua foto;
● O arquivo .jpeg da foto ficará armazenado no device
● No SQLite, guardaremos apenas o caminho para o arquivo físico
● Na hora de carregar a foto, pegamos o caminho armazenado no SQLite, acessamos o device e carregamos a imagem na tela.
M.Sc. Márcio Palheta
5/41
Android e o sistema de Arquivos
● No Android, temos as classes tradicionais de arquivos:
– FileInputStream e FileOutputStream;● A Activity tem métodos para gerar esses objetos:
– FileInputStream stream = openFileInput("arquivo.txt");● E se você precisar trabalhar com memória externa?
● File diretorio = Enviroment.getExternalStorageDirectory()
● Devolve um diretório externo, provavelmente, um sdcard
M.Sc. Márcio Palheta
6/41
Câmera
● O android nos oferece duas formas de manipular câmera, assim como ocorreu com a Chamada Telefônica
● Na 1a, podemos usar e controlar todo o ciclo de vida e opções do uso da câmera, como, por exemplo, habilitar flash e controlar a entrada de luz
● Na 2a, podemos chamar uma Activity especialista no tratamento da câmera. Essa Activity recebe como parâmetro, o local para salvar a foto capturada.
● Bom, acho uma boa optarmos pela 2a alternativa.
● E vamos aos códigos...
M.Sc. Márcio Palheta
7/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
M.Sc. Márcio Palheta
8/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
Crie o métodocarregarFoto()
M.Sc. Márcio Palheta
9/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
Crie o métodocarregarFoto()Converte um
Arquivo em um Objeto JAVA
M.Sc. Márcio Palheta
10/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
Crie o métodocarregarFoto()Converte um
Arquivo em um Objeto JAVA
Definição de umaImagem reduzida
M.Sc. Márcio Palheta
11/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
Crie o métodocarregarFoto()Converte um
Arquivo em um Objeto JAVA
Definição de umaImagem reduzida
Atualiza o atributofoto do Aluno
M.Sc. Márcio Palheta
12/41
Exercício 01: Carregar jpeg com a foto
● Crie o método FormularioHelper.carregarFoto()
Crie o métodocarregarFoto()Converte um
Arquivo em um Objeto JAVA
Definição de umaImagem reduzida
Atualiza o atributofoto do Aluno
Atualiza a imagemna Tela
M.Sc. Márcio Palheta
13/41
Exercício 02: Altere o FormularioHelper
M.Sc. Márcio Palheta
14/41
Exercício 02: Altere o FormularioHelper
Carregar a fotodo Aluno
M.Sc. Márcio Palheta
15/41
Exercício 02: Altere o FormularioHelper
Carregar a fotodo Aluno
Crie o métodogetFoto()
M.Sc. Márcio Palheta
16/41
Hora de chamar a câmera
● Para acessar a câmera, vamos seguir a estratégia de chamar uma Intent implícita, especialista em câmera:
● Podemos informar o local para salvar a foto:
● E esperar o retorno, com nome do arquivo gerado.
● Para isso, informamos um código para a requisição (requestCode), comumente associado a uma constante:
Intent irParaCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
irParaCamera.putExtra(MediaStore.EXTRA_OUTPUT, localFoto);
startActivityForResult(irParaCamera, FAZER_FOTO);
M.Sc. Márcio Palheta
17/41
Hora de chamar a câmera (continuação)
● O retorno do método startActivityForResult() vem no callback method onActivityResult()
● O requestCode == FAZER_FOTO
● Já o resultCode pode ser:
– RESULT_OK: ocorreu tudo bem. :-)
– RESULT_CANCELED: em caso de problemas
ou cancelamento :-(
@Overrideprotected void onActivityResult(
int requestCode, int resultCode, Intent data) { … }
M.Sc. Márcio Palheta
18/41
Exercício 03: Mudanças no Formulário
● Na classe FormularioActivity, inclua novos atributos para lidar com a câmera:
M.Sc. Márcio Palheta
19/41
Exercício 03: Mudanças no Formulário
● Na classe FormularioActivity, inclua novos atributos para lidar com a câmera:
M.Sc. Márcio Palheta
20/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
M.Sc. Márcio Palheta
21/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do clickda Foto do Aluno
M.Sc. Márcio Palheta
22/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do clickda Foto do AlunoDevolve o
ImageView da foto
M.Sc. Márcio Palheta
23/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do clickda Foto do AlunoDevolve o
ImageView da foto
M.Sc. Márcio Palheta
24/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
M.Sc. Márcio Palheta
25/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto: Local em que a Foto
será armazenada
M.Sc. Márcio Palheta
26/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto: Local em que a Foto
será armazenada
Referência para o Local de armazenamento
M.Sc. Márcio Palheta
27/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto: Local em que a Foto
será armazenada
Referência para o Local de armazenamento
Intent Implícita parauso da câmera
M.Sc. Márcio Palheta
28/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Chamando a Câmera
M.Sc. Márcio Palheta
29/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Chamando a Câmera
Parâmetro: local de armazenamento
M.Sc. Márcio Palheta
30/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Chamando a Câmera
Parâmetro: local de armazenamento
Inicia a Activity da Câmera.A resposta é lançada
no método de Callback onActivityResult()
M.Sc. Márcio Palheta
31/41
Exercício 04: Click da Imagem
● No método FormularioActivity.onCreate(), implemente o click da foto:
Chamando a Câmera
Parâmetro: local de armazenamento
Inicia a Activity da Câmera.A resposta é lançada
no método de Callback onActivityResult()
Código da requisição(requestCode)
M.Sc. Márcio Palheta
32/41
Exercício 05: Verificação do resultado
● Na ForumlarioActivity, crie o método onActivityResult(), para verificar o resultado retornado pela Intent da Câmera:
M.Sc. Márcio Palheta
33/41
Exercício 05: Verificação do resultado
● Na ForumlarioActivity, crie o método onActivityResult(), para verificar o resultado retornado pela Intent da Câmera:
Tratamento da respostada Intent da câmera
M.Sc. Márcio Palheta
34/41
Teste das atualizações
Click na ImageView
M.Sc. Márcio Palheta
35/41
Teste das atualizações
Capture a imagem
M.Sc. Márcio Palheta
36/41
Teste das atualizações
Salve a imagem
M.Sc. Márcio Palheta
37/41
Teste das atualizações
Imagem Atualizada
M.Sc. Márcio Palheta
38/41
Desafio
● Quando cadastramos um aluno, o formulário está vazio;
● Se você clicar na foto, a câmera é chamada;
● A foto é salva no device;
● E exibida na tela de formulário;
● Porém, se girarmos a tela, o que acontece?
● Isso mesmo, a foto é perdida.
● Resolva esse problema, recorrente em Android Apps
● Ideia fantástica: acho que você pode usar o Bundle.
● Só acho :-)
M.Sc. Márcio Palheta
39/41
O que vem a seguir?
● LayoutInflater
● Serviços de background: Receber SMS e Tocar MP3
● Integração via JSON
● Tarefas assíncronas e Barra de progresso
● Fragments
● Google Maps e GPS
M.Sc. Márcio Palheta
40/41
Referências
● www.caelum.com.br● d.android.com● LECHETA, Ricardo. Google Android, 3a edição,
Novatec, São Paulo, 2013● Código fonte completo:
https://github.com/marciopalheta/cursosandroid
Capítulo 07: Câmera e Arquivos
Top Related