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 sites.google.com/site/marcio palheta
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? 3/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. 4/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 5/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... 6/41
Exercício 01: Carregar jpeg com a foto Crie o método FormularioHelper.carregarFoto() 7/41
Exercício 01: Carregar jpeg com a foto Crie o método carregarfoto() Crie o método FormularioHelper.carregarFoto() 8/41
Exercício 01: Carregar jpeg com a foto Converte um Arquivo em um Objeto JAVA Crie o método carregarfoto() Crie o método FormularioHelper.carregarFoto() 9/41
Exercício 01: Carregar jpeg com a foto Converte um Arquivo em um Objeto JAVA Crie o método carregarfoto() Crie o método FormularioHelper.carregarFoto() Definição de uma Imagem reduzida 10/41
Exercício 01: Carregar jpeg com a foto Converte um Arquivo em um Objeto JAVA Crie o método carregarfoto() Crie o método FormularioHelper.carregarFoto() Definição de uma Imagem reduzida Atualiza o atributo foto do Aluno 11/41
Exercício 01: Carregar jpeg com a foto Converte um Arquivo em um Objeto JAVA Crie o método carregarfoto() Crie o método FormularioHelper.carregarFoto() Definição de uma Imagem reduzida Atualiza o atributo foto do Aluno Atualiza a imagem na Tela 12/41
Exercício 02: Altere o FormularioHelper 13/41
Exercício 02: Altere o FormularioHelper Carregar a foto do Aluno 14/41
Exercício 02: Altere o FormularioHelper Carregar a foto do Aluno Crie o método getfoto() 15/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: Intent irparacamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Podemos informar o local para salvar a foto: irparacamera.putextra(mediastore.extra_output, localfoto); 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: startactivityforresult(irparacamera, FAZER_FOTO); 16/41
Hora de chamar a câmera (continuação) O retorno do método startactivityforresult() vem no callback method onactivityresult() @Override protected void onactivityresult( int requestcode, int resultcode, Intent data) { } O requestcode == FAZER_FOTO Já o resultcode pode ser: RESULT_OK: ocorreu tudo bem. :-) RESULT_CANCELED: em caso de problemas ou cancelamento :-( 17/41
Exercício 03: Mudanças no Formulário Na classe FormularioActivity, inclua novos atributos para lidar com a câmera: 18/41
Exercício 03: Mudanças no Formulário Na classe FormularioActivity, inclua novos atributos para lidar com a câmera: 19/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: 20/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Controle do click da Foto do Aluno 21/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Devolve o ImageView da foto Controle do click da Foto do Aluno 22/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Devolve o ImageView da foto Controle do click da Foto do Aluno 23/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: 24/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Local em que a Foto será armazenada 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 Referência para o Local de armazenamento 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 Intent Implícita para uso da câmera 27/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Chamando a Câmera 28/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Parâmetro: local de armazenamento Chamando a Câmera 29/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Inicia a Activity da Câmera. A resposta é lançada no método de Callback onactivityresult() Parâmetro: local de armazenamento Chamando a Câmera 30/41
Exercício 04: Click da Imagem No método FormularioActivity.onCreate(), implemente o click da foto: Inicia a Activity da Câmera. A resposta é lançada no método de Callback onactivityresult() Parâmetro: local de armazenamento Chamando a Câmera Código M.Sc. da Márcio requisição Palheta (requestcode) 31/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: 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: Tratamento da resposta da Intent da câmera 33/41
Teste das atualizações Click na ImageView 34/41
Teste das atualizações Capture a imagem 35/41
Teste das atualizações Salve a imagem 36/41
Teste das atualizações Imagem Atualizada 37/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 :-) 38/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 39/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 40/41
Capítulo 07: Câmera e Arquivos