capítulo 07 - acesso a câmera e arquivos armazenados no device

41
Capítulo 07: Câmera e Arquivos

Upload: marcio-palheta

Post on 11-Jun-2015

1.853 views

Category:

Education


0 download

DESCRIPTION

Neste capítulo discutimos o acesso a arquivos armazenados no device e utilização da câmera do celular. Itens discutidos: 1. Carregar imagens armazenadas no device com Bitmap, BitmapFactory, decodeFile e createScaleBitMap. 2. Chamada à camêra usando uma Intent implícita; 3. Iniciar uma Intent e aguardar o seu resultado; 4. Método startActivityForResult()

TRANSCRIPT

Page 1: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

Capítulo 07: Câmera e Arquivos

Page 2: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

[email protected]

● sites.google.com/site/marciopalheta

Page 3: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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?

Page 4: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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.

Page 5: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 6: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 7: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

7/41

Exercício 01: Carregar jpeg com a foto

● Crie o método FormularioHelper.carregarFoto()

Page 8: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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()

Page 9: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 10: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 11: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 12: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 13: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

13/41

Exercício 02: Altere o FormularioHelper

Page 14: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

14/41

Exercício 02: Altere o FormularioHelper

Carregar a fotodo Aluno

Page 15: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

15/41

Exercício 02: Altere o FormularioHelper

Carregar a fotodo Aluno

Crie o métodogetFoto()

Page 16: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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);

Page 17: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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) { … }

Page 18: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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:

Page 19: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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:

Page 20: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

20/41

Exercício 04: Click da Imagem

● No método FormularioActivity.onCreate(), implemente o click da foto:

Page 21: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 22: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 23: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 24: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

24/41

Exercício 04: Click da Imagem

● No método FormularioActivity.onCreate(), implemente o click da foto:

Page 25: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 26: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 27: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 28: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 29: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 30: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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()

Page 31: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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)

Page 32: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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:

Page 33: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 34: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

34/41

Teste das atualizações

Click na ImageView

Page 35: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

35/41

Teste das atualizações

Capture a imagem

Page 36: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

36/41

Teste das atualizações

Salve a imagem

Page 37: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

M.Sc. Márcio Palheta

37/41

Teste das atualizações

Imagem Atualizada

Page 38: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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 :-)

Page 39: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 40: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

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

Page 41: Capítulo 07 - Acesso a câmera e arquivos armazenados no device

Capítulo 07: Câmera e Arquivos