Xamarin.Forms ile Kamera Kullanımı [Media Plugin]

Merhaba,

Bugün Xamarin.Forms ile cihaz üzerindeki kamera kullanımını ve galeri içerisine nasıl erişeceğimizi Xamarin.Forms Media Plugin ile inceleyeceğiz.

Kullanacağımız plugin : https://github.com/jamesmontemagno/MediaPlugin

Yeni bir PCL projesi açarak başlıyorum..

PCL

Plugin'i nuget yardımıyla projeme ekliyorum.

Media Plugin

Aslında şimdiye kadar en zor kısımları yaptık. Plugin içerisinde tüm metotlarımız hazır ve direkt kullanacağız.

Yeni bir Views klasörü yaratıp, içerisine MediaPage sayfasını ekliyorum.

Tasarım kısmına geçmeden önce gidip güzel bir button hazırlıyorum..

CustomButton

MediaPage.xaml.cs içerisinde RelativeLayout kullanarak 2 Button ve 1 Image içeren tasarım işlemlerini yaptım.

Design

Senaryomuzda "Take Photo" ile cihaz kamerasını aktif hale getirip resim çekme işlemini gerçekleştireceğiz "Pick Photo" ile galeri klasörünü açıp oradan istediğimiz resmi seçip ekranda göstereceğiz.

Tasarım işlemleri bittikten sonra butonlarımın click eventlerini açarak artık plugin kodlarını kullanmaya başlıyoruz..

Button Click

Take Photo için gerekli işlemleri yazmaya başlıyorum..

Bence ilk yazmamız gereken kodlar, cihaz üzerinde bir kamera olup olmadığı veya çalışır durumda olduğu ve o kameranın fotoğraf çekebildiğini kontrol etmek.

CrossMedia.Current.IsCameraAvailable ve CrossMedia.Current.IsTakePhotoSupported özelliklerini bunu bizim için yapıyor.

Media Plugin

TakePhotoAsync metodu fotoğraf çekmemizi sağlıyor ve içerisine bir StoreCameraOptions alıyor.

StoreCameraOptions yardımcı sınıfı bize durumları kontrol edebilmemiz için seçenekler sunuyor.

  1. Fotoğraf adı
  2. Fotoğrafın saklanacağı klasör
  3. Uygulama açıldığında kullanılacak kamera
  4. Fotoğrafları albüm şeklinde sakla

Save Image

Eğer kamera açıldıktan sonra fotoğraf çektiysek bunun kontrolünü yapıp, ilgili Image objemizin source özelliğine çektiğimiz resmi set ediyoruz.

Hemen test edelim..

Screenshot

Kendi yazdığımız Xamarin.Forms uygulaması ile Media Plugin kullanarak selfie çektik 🙂

Önemli : Droid için,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> yetkisini Manifest dosyasına vermelisiniz.

Galeri ile devam edelim…

Galeri

İlk yapmamız gereken galeri yetkisi ve kullanılabilirlik kontrolü daha sonra PickPhotoAsync ile galeriyi açmak ve seçim yaptırmak.

Uyarı : Cihazlar arasında farklılıklar gösterebileceği için sadece galeri değil, cihaz içerisinde fotoğraf klasörü olarak açılabilecek tüm seçenekler size sunulacaktır.

Fotoğraflar için yaptıklarımızı videolar için de yapabilir miyiz? EVET!

Video Plugin

Bu sefer TakeVideoAsync metodu ve StoreVideoOptions sınıfından yardım alıyoruz.

StoreVideoOptions, StoreCameraMediaOptions gibi bize kolaylıklar sağlıyor.

Varsayılan kamera, video kalitesi, video adı, dosya yolu, albüm seçeneği ve hatta istenilen video boyutu gibi özellikleri var.

iOS için;

iOS Media Plugin

WinPhone 8.1 üzerinde çalıştırmak için,

WinPhone 8.1

App.xaml içeirisinde gerekli metodu override etmelisiniz.

Detaylar için : https://github.com/jamesmontemagno/MediaPlugin

Kaynak kodlar : github

Görüşmek üzere..

Yiğit

Xamarin Developer, Consultant & Architect. Community Leader and Director of Xamarin Türkiye

5 Comments

You can post comments in this post.


  • Merhaba Yiğit Hocam,

    Fotoğrafları bu plugin ile çok rahat bir şekilde alıyorum daha sonra çözünürlüğünü düşürerek boyutunu düşürüyorum. Fakat boyutunu düşürdüğüm fotoğrafı listelerken yani gösterirken yönü(rotation) 0(sıfır) olanların dışındaki fotoğrafların yönü kayıyor. Bunu nasıl düzeltebilirim. Bu plugin’de fotoğrafın yönünü alabileceğim bir özelliği var mıdır?

    İyi Çalışmalar

    Caner Balcancı 2 sene ago Reply


    • Caner selam,
      Şu an sebebini bilmiyorum fakat, en kısa zamanda(max hafta sonuna kadar) bakıp sana dönmeye çalışırım. Bu zamana kadar sen bulursan paylaşırsan sevinirim 🙂

      Yiğit 2 sene ago Reply


  • Bu plugin ile devamlı fotoğraf çekmek mümkün mü yani fotoğrafı çektikten sonra arkadaki form açılmadan sürekli fotoğraf çekip bir listeye atmak istiyorum, yapılabiliyorsa paylaşabilir misiniz?

    Armi 6 ay ago Reply


    • Bildigim kadariyla bu plugin’in oyle bir ozelligi yok. Fakat CustomRenderer ile kendiniz bu ozelligi ekleyebilirsiniz.

      Yiğit 6 ay ago Reply


  • hocam merhaba. visual studio for mac de xmarin android emulatör kısmında neden java 8 istiyor jaba 10 çıktı. ama java 8 i tanıtmamızı istiyor ve java 8 i tanıyınca dolarak olarak api 23 üstündeki api emulatörler çalışmıyor ve deneme yapamıyoruz. neden java 10 a güncellenmiyor?

    bilal karademir 3 ay ago Reply


Post A Reply