Android Programlama | Galeri ve Kamerayı Kullanarak Resim Ekleme

Merhabalar,

Bugünkü uygulamamızda yazdığımız Android Application’ımızda galeriden veya kamerayı kullanarak resim eklemeyi anlatacağım.

Öncelikle aşağıdaki gibi bir layout tasarlıyoruz. Bu layoutta galeri ve kameraya erişebileceğimiz 2 adet button ve buradan dönecek olan image’imiz için bir adette imageView kullanacağız.

layout

 

Layout kodumuz böyle olmalı:

Daha sonra kod tarafında yapacağımz işlere dönüyoruz.

Activity içerisinde ilk olarak 2 adet değişken tanımlıyoruz, bunlar onActivityResult içinde kullanacağımız kamera veya galeri değişkenleri olacak.

Şimdi ise layout içerisinde tanımladığımız buttonların click eventlerini yazmaya geçeceğiz. Galeri butonu için bir adet ImagePickListener adında bir OnClickListener tanımlıyorum. Bunun içerisinde galeriden resim seçebilmek için bir intent başlatıyorum. Intenti başlatırken de yukarıda yarattığım sabit action kodumu’da gönderiyorum. Daha sonra kodum aşağıdaki gibi olmuş oluyor;

Kamera butonu için ise kamerayı başlatan bir intent göndermeliyim. Aynı şekilde kamera activity’sini çağıran intentimi yaratıp, kamera action kodumla birlikte başlatıyorum.

Click eventlerimi de tanımladıktan sonra sıra başlatılan activitylerin dönüşünde seçtiğim veya kaydettiğim resmi mevcut activity içerisine çekmeye geliyor.

Bunun içinde onActivityResult methodunu override etmeliyiz. Bunun içerisinde de galeri veya kamera dan seçme durumuma göre resmi alıp imageView’a basmam gerekiyor. Bunlar için ise 2 method tanımlıyorum. Birisi galeriden seçilen resmi alıp imageView’a basacak. Diğeri ise kameradan çektiğim resmi alıp imageView’a basacak.

Galeriden seçilen resmi imageView içerisine basmak gayet kolay. Gönderdiğim intent datası ile resimlerin bulunduğu path’ini çekiyorum.  Daha sonra cursor ile seçtiğim resmin yolunu buradan çekiyorum. En son olarakda bunu imageView’a atmak kalıyor.

Kameradan seçilen resmi imageView’a basmak biraz daha komplike. Ve bir çok yol mevcut. Benim bulduğum en stabil yöntemde biraz çakallık var. Bütün resimleri döndürüp en son çekilen fotoğrafı alıp basıyorum 🙂

En son olarak da yazdığım click eventlerini buttınlara atamak kalıyor. Ve en sonunda class’ım şu şekilde oluyor;

Son olarak da kamerayı kullanabilmek ve external hafızaya erişebilmek için aşağıdaki permissionları yani izinleri manifest dosyasına eklemem gerekiyor;

Uygulama içerisinden örnek görüntü:

Screenshot_2014-03-05-11-37-13[1]

 

Kolay gelsin 🙂

 

Crop fonksiyonu eklenmiş halde kaynak kodunu bulabilirsiniz.

Source Code :DoCrop

 

21 thoughts

  1. hakan Bey Layout kısmını ekledim. anacak daha sonrasını tam olarak nasıl ve nereye yazacağımı bilmiyorum.

    1. merhabalar,
      tam olarak nerede takıldınız? kodları direk kullandıgınız aktivite içersinie yazabilirsiniz..

  2. Bu kodların çalıştığı uygulama var mı acaba çünkü ben yazılanları denedim ve çalışmadı

  3. Projenin çalışır halini Proje Dosyası olarak paylaşabilme imkanınız var mı ? Kopyala yapıştır yapınca bazı sorunlar çıkıyor.

    1. Evet hocam, isterseniz ayrı yere isterseniz aynı class da kullanabilirsiniz, sizin mimarinize kalmış birşey. İncelemek isterseniz yazının sonun da download linki mevcut.

    1. Merhaba,
      API kısıtlaması yok, fakat Marshmallow için kullanıcı dan kamera kullanım izni almanız gerekiyor.

  4. Uygulamayı çalıştırınca kameradan çekilen resim yerine başka bir seçiyor. Galeriden seç deyince de hata fırlatıp uygulamayı kapatıyor.

  5. kameraya girmeye çalıştığımda open app again hatası alıyorum ve galerideki foto imageview e gelmiyor

  6. android studio ile kullanıcının galerisinden siteye resim almayı nasıl yapabilirim ? php site. teşekkürler

    1. kullanıcının tarayıcısı tarafından otomatik hallolacaktır büyük bir ihtimal. Siz sadece web tarafınızda gerekli kodları yazın yeterli.

  7. burada kamerayı açılışta getirebilimiydik …yani çerçevenin içinde otomatik başlatabilirmiyiz.

    1. Merhaba, evet başlatabilirsiniz, fakat uygulama açılışında gerekli izinleri kullanıcıya sormanız gerekiyor.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir