Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Dispositivos Móveis / Aula
A maneira mais simples de se capturar imagens e vídeos em aplicações Android é a utilização da aplicação padrão do Android para essas funcionalidades. A aplicação padrão está configurada para receber Intents de tipos conhecidos, os mesmos que veremos agora.
O primeiro passo que devemos atentar é a utilização da propriedade MediaStore.EXTRA_OUTPUT, que pode ou não ser passada à aplicação de câmera do Android. Caso seja configurada, essa propriedade especifica ao Android o nome do arquivo a ser gerado, bem como o local em que ele deve ser salvo. Quando não utilizada, a ausência dessa propriedade indica ao Android para salvar a imagem com o nome padrão no local padrão. Assim, perde-se um pouco do controle sobre o que o Android fará com a imagem obtida. Apesar de opcional, é sempre bom configurar essa propriedade. Vejamos agora na Listagem 4 o código necessário para tirarmos uma foto dentro de nossa aplicação.
private static final int CAPTURAR_IMAGEM = 100;
private Uri fileUri;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File mediaStorageDir = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "NomeDaPasta");
if (!mediaStorageDir.exists()){
mediaStorageDir.mkdirs();
}
String timeStamp =
new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File file = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
fileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURAR_IMAGEM);
}
Vamos analisar o código apresentado. Primeiramente, criamos um Intent passando como ação a constante MediaStore.ACTION_IMAGE_CAPTURE. Com esse Intent, podemos requisitar ao Android o serviço de câmera dele para capturar imagens. Uma vez que temos o Intent, o próximo passo é definir onde o arquivo será salvo.
Para definir isso, solicitamos ao sistema uma pasta dentro de seu diretório publico de imagens com o nome que quisermos. Em seguida, se essa pasta não existir, nós a criamos. Com isso, já temos o local onde a imagem será salva. Precisamos agora do nome que o arquivo terá. Para isso, pegamos o caminho indicado pela pasta selecionada e adicionamos a ele o código IMG_, o timeStamp da data em que a foto foi tirada e a extensão .jpg. Na sequência, criamos um URI a partir do arquivo declarado e adicionamos esse URI ao Intent já criado como a propriedade EXTRA_OUTPUT que vimos anteriormente. Com isso, o Intent está pronto para ser enviado e aí o enviamos por um resultado. Adiante, na seção "Tratando o resultado do Intent", veremos como tratar o resultado gerado pela Activity da câmera.
Após executar o código exibido na Listagem 4, a sua aplicação lançará a Activity de câmera do Android e ela será responsável por tratar tudo relacionado a câmera, como zoom, ajustes no contraste, flash, caso disponível, entre outras coisas. Uma vez que o usuário tenha tirado a foto e escolhido armazená-la, a Activity da câmera retornará para a Activity que a chamou e o resultado deverá ser tratado no método onActivityResult. Antes de vermos como lidar com esse velho conhecido, vamos ver as mudanças necessárias para capturar vídeo no lugar de fotos.
Versão 5.3 - Todos os Direitos reservados