Capítulo 07: Câmera e Arquivos
Instrutor
●
Programador desde 2000
●
Aluno de doutorado
●
Mestre em informática pelo ICOMP/UFAM
●
Especialista em aplicações WEB – FUCAPI
marcio.palheta@gmail.com
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?
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.
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
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.
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Crie o método
carregarFoto()
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Crie o método carregarFoto() Converte um
Arquivo em um
Objeto JAVA
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Crie o método carregarFoto() Converte um
Arquivo em um Objeto JAVA
Definição de uma
Imagem reduzida
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Crie o método carregarFoto() Converte um
Arquivo em um Objeto JAVA
Definição de uma Imagem reduzida
Atualiza o atributo
foto do Aluno
Exercício 01: Carregar jpeg com a foto
●
Crie o método FormularioHelper.carregarFoto()
Crie o método carregarFoto() Converte um
Arquivo em um Objeto JAVA
Definição de uma Imagem reduzida
Atualiza o atributo foto do Aluno
Atualiza a imagem
na Tela
Exercício 02: Altere o FormularioHelper
Exercício 02: Altere o FormularioHelper
Carregar a foto
do Aluno
Exercício 02: Altere o FormularioHelper
Carregar a foto do Aluno
Crie o método
getFoto()
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
Intent irParaCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
irParaCamera.putExtra(MediaStore.EXTRA_OUTPUT, localFoto);
Hora de chamar a câmera (continuação)
●
O retorno do méto do 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 :-(
@Override
protected void onActivityResult(
int requestCode, int resultCode, Intent data) { … }
Exercício 03: Mudanças no Formulário
●
Na classe FormularioActivity, inclua novos atributos para
lidar com a câmera:
Exercício 03: Mudanças no Formulário
●
Na classe FormularioActivity, inclua novos atributos para
lidar com a câmera:
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o
click da foto:
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do click
da Foto do Aluno
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do click da Foto do Aluno Devolve o
ImageView da foto
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o click da foto:
Controle do click da Foto do Aluno Devolve o
ImageView da foto
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o
click da foto:
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o
click da foto: Local em que a Foto
será armazenada
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
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 para
uso da câmera
Exercício 04: Click da Imagem
●
No método FormularioActivity.onCreate(), implemente o click da foto:
Chamando a
Câmera
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
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
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()
Exercício 05: Verificação do resultado
●
Na ForumlarioActivity, crie o método onActivityResult(),
para verificar o resultado retornado pela Intent da Câmera:
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 resposta
da Intent da câmera
Teste das atualizações
Click na
ImageView
Teste das atualizações
Capture a
imagem
Teste das atualizações
Salve a
imagem
Teste das atualizações
Imagem
Atualizada
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
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
Referências
●
www.caelum.com.br
●
d.android.com
●
LECHETA, Ricardo. Google Android, 3a edição, Novatec, São Paulo, 2013
●