Utilizando a Câmera – Xamarin.Forms

Olá, neste post irei demonstrar como a sua aplicação Xamarin.Forms pode acessar a câmera do dispositivo para tirar uma foto, fazer um vídeo ou acessar a galeria.

Para este exemplo irei assumir que você acabou de criar uma aplicação Xamarin.Forms, caso possua alguma dúvida sobre isso recomendo ler o post Criando um projeto Xamarin.Forms.

O primeiro passo após a sua aplicação ter sido criada é adicionar o Nuget Package Xam.Plugin.Media.

ADICIONANDO O NUGET PACKAGE

Clique com o botão direito em cima de sua Solution e selecione “Manage NuGet Packages for Solution…”.

nugetp

 

Digite “Xam.Plugin.Media” e selecione o plugin como demonstrado na imagem a seguir.

nuget

 

Selecione todos os projetos e clique no botão “Install”.

nuget

Android

Para a plataforma Android é necessário realizar a inicialização do plugin no arquivo MainActivity, para isso adicione a seguinte linha de código:

await CrossMedia.Current.Initialize();

Essa linha será adicionada após o comando base.OnCreate(bundle) como demonstrado a seguir.

 

Em seguida, é preciso adicionar a permissão para o seu app acessar a câmera, isso é feito no  arquivo AndroidManifest.xml.

  • Adicione a permissão “android.permission.CAMERA”.
  • Dentro de application, adicione o provider e meta-data como demonstrado a seguir.

 

 

Dentro da pasta “Resources” crie uma pasta chamada xml e  adicione um arquivo chamado file_paths.xml, como demonstrado a seguir.

iOS

Adicionar permissões para que o seu app acesse a câmera na plataforma iOS é necessário editar o arquivo Info.plist que encontra-se no seu projeto .iOS

info

No arquivo Info.plist iremos adicionar as seguintes chaves:

  • NSCameraUsageDescription
  • NSPhotoLibraryUsageDescription
  • NSMicrophoneUsageDescription
  • NSPhotoLibraryAddUsageDescription

Portable

O próximo passo é colocar alguns botões para acionar a câmera ou a galeria e um Image para demonstrar a foto tirada.

Xaml

O evento click de cada botão ira chamar o seu respectivo método, como demonstrado a seguir.

Tirar Foto

tirarfoto

 

Escolher Foto

escolherfoto

 

Gravar Vídeo

gravarvideo.png

 

Escolher Vídeo

escolhervideo

CODE-BEHIND

Resultado

ezgif.com-gif-maker

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

31 comentários em “Utilizando a Câmera – Xamarin.Forms

  1. sabe me dizer como tirar uma FOTO DO VIDEO ? tipo screenshot, mas com a camera em modo video, ai uma função para ir batendo foto dos frame da camera ?

    Curtir

  2. Juliano, ao usar o evento Tirar Foto , visualizo a foto tirada e ao dar ok o meu aplicativo é jogado para o segundo plano. O que pode ser?

    Curtir

      1. No momento fiz apenas teste no meu celular mesmo. Tanto tirar uma foto nova como escolher na galeria, ao confirmar o APP fecha.

        Curtir

      2. Juliano ainda não tive sucesso. Caso não seja inconveniente segue abaixo o meu OutPut
        04-01 23:52:46.491 D/SecWifiDisplayUtil( 2994): Metadata value : SecSettings2
        04-01 23:52:46.491 D/ViewRootImpl( 2994): #1 mView = com.android.internal.policy.PhoneWindow$DecorView{c3923e2 I.E…… R…..ID 0,0-0,0}
        04-01 23:52:46.811 D/mali_winsys( 2994): new_window_surface returns 0x3000, [720×1280]-format:1
        04-01 23:52:46.831 D/ViewRootImpl( 2994): MSG_RESIZED_REPORT: ci=Rect(0, 48 – 0, 0) vi=Rect(0, 48 – 0, 0) or=1
        04-01 23:52:47.051 D/ViewRootImpl( 2994): #3 mView = null
        04-01 23:52:47.721 I/art ( 2994): Starting a blocking GC Explicit
        04-01 23:52:47.761 I/art ( 2994): Explicit concurrent mark sweep GC freed 1273(58KB) AllocSpace objects, 0(0B) LOS objects, 16% free, 41MB/49MB, paused 608us total 35.386ms
        04-01 23:52:47.761 D/Mono ( 2994): GC_TAR_BRIDGE bridges 299 objects 8103 colors 299 ignored 3478 sccs 299 xref 0 cache 0/0 setup 0.09ms tarjan 6.18ms scc-setup 0.13ms gather-xref 0.01ms xref-setup 0.00ms cleanup 0.66ms
        04-01 23:52:47.761 D/Mono ( 2994): GC_BRIDGE: Complete, was running for 39.49ms
        04-01 23:52:47.761 D/Mono ( 2994): GC_MINOR: (Nursery full) time 16.99ms, stw 17.39ms promoted 190K major size: 3728K in use: 2664K los size: 1024K in use: 788K

        Curtir

  3. Olá Juliano, fiz os mesmo passo em uma app net standard, mas esta dando erro “Java.Lang.RuntimeException: Unable to start activity ComponentInfo{com.companyname.App2/md5e528b4472ea765fab6a0696a5fd66c3a.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.support.v7.widget.ContentFrameLayout.setAttachListener(android.support.v7.widget.ContentFrameLayout$OnAttachListener)’ on a null object reference” e para o app.
    A câmera funciona somente se altera a herança do MainActivity para Xamarin.Forms.Platform.Android.FormsApplicationActivity, mas com essa alteração não consigo usar uma MasterPage.
    O pode ser?

    Curtido por 1 pessoa

  4. na hora de abrir a câmera travou na seguinte linha
    var file = await CrossMedia.Current.TakePhotoAsync(
    new StoreCameraMediaOptions
    {
    SaveToAlbum = true,
    Directory = “Demo”
    });
    agradeço ajuda desde já

    Curtir

      1. e o melhor é, quando é pra pegar da galeria funciona! de cabelo em pé aqui já pois preciso disso pro trabalho

        Curtir

  5. Juliano, boa tarde!

    No projeto para iOS, nao consegui localizar no arquivo Info.plist onde eu coloco as chaves

    NSCameraUsageDescription
    NSPhotoLibraryUsageDescription
    NSMicrophoneUsageDescription
    NSPhotoLibraryAddUsageDescription

    Poderia me ajudar?

    Curtir

    1. Olá Vilmar,

      Botão direito no Arquivo Info.plist, abrir com, XML Text Editor.
      Em seguida coloque dentro de “dict” depois do nome do seu app.

      Espero ter ajudado. 🙂

      Curtir

  6. Juliano, boa noite! To com o seguinte erro:

    Unhandled Exception:

    Java.Lang.RuntimeException: Unable to start activity ComponentInfo{Procon_Sorocaba.Procon_Sorocaba/md53d87c17fb05de643ade6b138d9319cf2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.support.v7.widget.ContentFrameLayout.setAttachListener(android.support.v7.widget.ContentFrameLayout$OnAttachListener)’ on a null object reference

    Consegue me ajudar? Falta so isso pra terminar o projeto …

    Curtir

    1. Desconsidera, deu certo aqui. Peguei o problema de cima que tava ai e era exatamente o mesmo. Unico problema que ele nao ta pegando a permissão automática pra acessar camera e galeria. Tem algum jeito?

      Curtir

      1. Olá Vilmar,

        isso está acontecendo no iOS ?
        Você está rodando em debug ?
        Lembre-se que cada vez que você executa o projeto pelo VS ele desinstala o app e instala novamente, então será pedido a permissão novamente.
        Experimente fechar o app e abrir novamente sem rodar pelo VS, acredito que ele não irá pedir mais a permissão a partir do segundo acesso.

        Espero ter ajudado.

        Curtir

      2. Consegui finalmente instalar, mas assim que termino a instalção o método
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
        global::Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        return base.FinishedLaunching(app, options);
        }
        para de funcionar 😦
        a linha LoadApplication(new App()); no App() fica vermelho sem achar o namespace e não consegui resolver

        Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s