Neste artigo vou mostrar como usar a câmera do dispostivo em aplicações Xamarin Android usando o Visual Studio 2015 e a linguagem C#. |
Existem diversas abordagens que podemos adotar para usar a câmera do dispositivo no Xamarin Android, e, neste artigo, eu vou usar o provider MediaStore.
O provedor (provider) de mídia - MediaStore - contém metadados para todas as mídias disponíveis em dispositivos de armazenamento interno e externo.
Nota: O recurso Provider do Android fornece classes para acessar os provedores de conteúdo fornecidos pelo Android. O Android é fornecido com vários provedores de conteúdo que armazenam dados comuns, como informações de contatos, informações de calendário e arquivos de mídia. Essas classes fornecem métodos simplificados para adicionar ou recuperar dados desses provedores de conteúdo.
Podemos usar o campo ActionImageCapture que é uma Intent padrão que pode ser enviada para que a câmera do dispositivo capture uma imagem e a retorne.
Intent intent = new
Intent(MediaStore.ActionImageCapture);
StartActivityForResult(intent, 0);
A seguir usamos o método StartActivityForResult para chamar a Intent com a expectativa de obter algum resultado de volta; no caso a imagem capturada pela câmera.
Também definimos o método OnActivityResult que é chamado quando uma atividade que foi lançada termina, dando-nos o requestCode que usamos, o resultCode retornado e dados adicionais (data).
protected override void OnActivityResult(int
requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
global::Android.Graphics.Bitmap
bitmap = (Bitmap)data.Extras.Get("data");
imgView1.SetImageBitmap(bitmap);
}
Observe que tivemos que usar o atributo global::Android.Graphics.Bitmap para usar o tipo Bitmap e contornar o não reconhecimento do namespace : using Android.Graphics;
Vamos então mostrar como implementar o recurso no Xamarin Android.
Recursos usados:
Visual Studio Community 2015 ou Xamarin Studio
Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.
Criando o projeto no VS Community 2015
Abra o VS 2015 Community e clique em New Project;
Selecione a linguagem Visual C# e o template Android -> Blank App(Android)
Informe o nome Droid_Camera e clique no botão OK;
Abra o arquivo Main.axml na pasta Resources/layout e no modo Designer e a seguir inclua a partir da ToolBox os seguintes controles:
Ao inserir o RadioGroup já teremos o controle contendo 3 RadioButtons. Acrescentamos assim mais dois RadioButtons a partir da ToolBox no RadioGroup para ficar com 5 RadioButtons.
Abaixo vemos o leiaute no emulador do Xamarin e ao lado o respectivo código XML gerado :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10">
<ImageView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="#c1cdcd"
android:layout_weight="9"
android:id="@+id/imgvw1" />
<Button
android:text="Abrir Câmera"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnCamera" />
</LinearLayout>
|
Observe que usamos android:weightSum no layout em conjunto com android:weight em cada widget filha (ImageView e Button) para obter o layout exibido. (Veja abaixo o que diz a documentação)
Android: weightSum
Define a soma máxima do peso. Se não
especificado, a soma é calculada adicionando o layout_weight de
todas as views filhas. Isso pode ser usado, por exemplo, para dar a uma
única view filha 50% do espaço disponível total, dando-lhe um
layout_weight de 0,5 e definindo o weightSum para 1,0. |
Agora vamos definir o código no arquivo MainActivity.cs vinculado a nossa view Main.axml.
Tratando a seleção nos RadioButtons
Abra o arquivo MainActivity.cs e altere o código desse arquivo conforme abaixo:
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Content;
using Android.Provider;
using Android.Runtime;
using Android.Graphics;
namespace Droid_Camera
{
[Activity(Label = "Droid_Camera", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
ImageView imgView1;
Button btnCamera;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
btnCamera = FindViewById<Button>(Resource.Id.btnCamera);
imgView1 = FindViewById<ImageView>(Resource.Id.imgvw1);
btnCamera.Click += BtnCamera_Click;
}
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
global::Android.Graphics.Bitmap bitmap = (Bitmap)data.Extras.Get("data");
imgView1.SetImageBitmap(bitmap);
}
private void BtnCamera_Click(object sender, System.EventArgs e)
{
Intent intent = new Intent(MediaStore.ActionImageCapture);
StartActivityForResult(intent, 0);
}
}
}
|
Vamos entender o código :
1- Definimos uma variável do tipo Button que vai receber a instância do Button definido no Layout e uma variável do tipo ImageView para receber a instância do ImageView usado:
ImageView imgView1;
Button btnCamera;
2- Fizemoa a vinculação da nossa Activity com o arquivo de layout Main e criamos a instância do botão e do ImageView usados no Layout e definimos o evento Click do botão :
SetContentView (Resource.Layout.Main);
btnCamera = FindViewById<Button>(Resource.Id.btnCamera);
imgView1 = FindViewById<ImageView>(Resource.Id.imgvw1);btnCamera.Click += BtnCamera_Click;
3- No evento Click do botão : (ja foi explicado no início do artigo)
Usamos o
método
ActionImageCapture do provedor
MediaStore para capturar a imagem usando a câmera do dispositivo e exibindo
a imagem na widget ImageView.
Executando o projeto e fazendo a emulação no
dispostivo físico usando o Vysor iremos obter o seguinte resultado:
Nota: Para saber como usar o seu dispositivo físico usando o Vysor leia este artigo : Veja como emular usando o Vysor - Macoratti
Obs: Eu estou usando um Alcatel PIXI 4 (lembre-se de instalar o driver adb para fazer a ponte entre o Windows e o
Nesta abordagem o deploy do seu aplicativo android será feito no dispositivo conforme mostra a figura abaixo:
Pegue o projeto aqui : Droid_Camera.zip (sem as referências)
Porque a palavra da cruz é loucura para os que perecem; mas para nós, que
somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a
inteligência dos inteligentes.
1 Coríntios 1:18,19
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.App.AlertDialog/
https://developer.android.com/reference/android/app/Activity.html
https://developer.xamarin.com/api/type/Android.Widget.ProgressBar/