Android

Android İçerik Sağlayıcı (Content Provider)

Android’de İçerik Sağlayıcı, uygulamanın verilerini tek bir yerde depolamak ve bu verileri gerektiğinde farklı uygulamaların erişmesi için kullanılabilir hale getirmek için merkezi bir havuz görevi görecektir.

Android’de, İçerik Sağlayıcıları, diğer uygulamaların güvenli bir şekilde erişmesine ve uygulama verilerimize gereksinimlerimize göre değiştirmesine izin verecek şekilde yapılandırabiliriz.

Genel olarak, İçerik Sağlayıcı bir android uygulamasının bir parçasıdır ve uygulama verilerini depolamak için daha çok ilişkisel bir veritabanı gibi davranır. Insert(), update(), delete() ve query() yöntemlerini kullanarak içerik sağlayıcıda depolanan veriler üzerinde ekleme, güncelleme, silme ve düzenleme gibi birden çok işlemi gerçekleştirebiliriz.

Android’de, uygulama verilerimizi diğer uygulamalarla paylaşmak istediğimizde içerik sağlayıcıyı kullanabiliriz ve uygulamamıza bağlı diğer uygulamaları etkilemeden uygulama verilerimizde değişiklik yapmamızı sağlar.

Android’de içerik sağlayıcı, uygulama verilerini depolamak için farklı yöntemler kullanıyor. Uygulama verileri, gereksinimlerimize göre bir SQLite veritabanında veya dosyalarda veya hatta bir ağ üzerinden saklanabilir. İçerik sağlayıcıları kullanarak ses, video, resim ve kişisel iletişim bilgileri gibi verileri yönetebiliriz.

Verileri paylaşmak için içerik sağlayıcıda farklı türde erişim izinlerine sahibiz. Yalnızca uygulamamızla sınırlı veri erişimini kısıtlamak için içerik sağlayıcıda erişim kısıtlama izinleri belirleyebilir ve bir veriyi okumak veya yazmak için farklı izinler yapılandırabiliriz.

İçerik Sağlayıcıdan Verilere Erişim

İçerik sağlayıcıdan bir veriye erişmek için sağlayıcı ile istemci olarak iletişim kurmak için uygulamamızdaki ContentResolver nesnesini kullanmamız gerekiyor. ContentResolver nesnesi, bir sınıf örneği tarafından uygulanan sağlayıcı nesnesiyle (ContentProvider) iletişim kurar.

Genellikle, Android’de UI’den ContentResolver’a bir istek göndermek için, sorguyu arka planda eşzamansız olarak çalıştırmak için kullanılan CursorLoader adında başka bir nesnemiz vardır. Android uygulamasında, Activity veya Fragment gibi UI bileşenleri, ContentResolver kullanarak ContentProvider’dan gerekli verileri sorgulamak ve almak için bir CursorLoader çağırır.

ContentProvider nesnesi, istemciden veri isteklerini alır, istenen eylemleri gerçekleştirir (oluşturma, güncelleme, silme, geri alma) ve sonucu döndürür.

Aşağıda, ContentProvider nesnesinden veri almak için Activity veya Fragment kullanarak kullanıcı arayüzünden bir işlem istemenin resimli temsili yer almaktadır.

Bu, veri almak için gerekli eylemleri gerçekleştirmek için android uygulama kullanıcı arayüzü ile içerik sağlayıcılar arasındaki etkileşimin nasıl gerçekleşeceğidir.

İçerik URI’leri

Android’de İçerik URI’si, gerekli verileri almak için bir içerik sağlayıcıyı sorgulamak için kullanılan bir URI’dir. İçerik URI’leri, tüm sağlayıcının (yetkili) adını ve bir tabloya (yol) işaret eden adı içerecektir.

Genellikle android uygulamalarda URI formatı aşağıdaki gibi olacaktır.

Android uygulamasında bir URI’nin çeşitli bölümleriyle ilgili ayrıntılar aşağıdadır.

content:// : content:// dizesi URI’de her zaman bulunur ve verilen URI’nin bir içerik URI’si olduğunu göstermek için kullanılır.

authority : İçerik sağlayıcının adını temsil eder, örneğin telefon, kişiler vb. ve com.tutlane.contactprovider gibi üçüncü taraf içerik sağlayıcılar için tam nitelikli bir ad kullanmamız gerekir

path  : Tablonun yolunu temsil eder.

ContentResolver nesnesi, uygun sağlayıcıyı bulmak ve sorgu nesnelerini doğru sağlayıcıya göndermek için URI’nin yetkisini kullanır. Bundan sonra ContentProvider, erişilecek doğru tabloyu seçmek için içerik URI’sinin yolunu kullanır.

Aşağıda, android uygulamalarında basit bir URI örneği örneği verilmiştir.

Burada content:// dizesi, URI’nin bir içerik URI’si olduğunu göstermek için kullanılır, contact_info dizesi, sağlayıcının yetkisinin adıdır ve kullanıcılar dizesi, tablonun yoludur.

İçerik Sağlayıcı Oluşturma

Android uygulamalarda içerik sağlayıcı oluşturmak için aşağıdaki adımları izlemeliyiz.

  • ContentProvider temel sınıfını genişleten bir içerik sağlayıcı sınıfı oluşturmamız gerekiyor.
  • İçeriğe erişmek için içerik sağlayıcı URI’mizi tanımlamamız gerekiyor.
  • ContentProvider sınıfı, tüm bu yöntemleri alt sınıfımızın bir parçası olarak uygulamamız gereken altı soyut yöntem (insert(), update(), delete(), query(), getType()) tanımlar.
  • <provider> etiketini kullanarak içerik sağlayıcımızı AndroidManifest.xml’e kaydetmemiz gerekiyor.

ContentProvider sınıfının bir parçası olarak uygulanması gereken yöntemlerin listesi aşağıdadır.

  • query() – İstemciden bir istek alır. Argümanları kullanarak, istenen tablodan bir veri alır ve verileri bir cursor nesnesi olarak döndürür.
  • insert() – Bu metot, içerik sağlayıcımıza yeni bir satır ekleyecek ve yeni eklenen satır için içerik URI’sini döndürecektir.
  • update() – Bu metot, içerik sağlayıcımızdaki mevcut satırları günceller ve güncellenen satır sayısını döndürür. 
  • delete() – Bu metot içerik sağlayıcımızdaki satırları siler ve silinen satırların sayısını döndürür.
  • getType() – Bu metot, MIME veri türünü verilen içerik URI’sine döndürür.
  • onCreate() – Bu metot sağlayıcımızı başlatacak. Android sistemi, sağlayıcımızı oluşturduktan hemen sonra bu yöntemi arayacaktır.

Android İçerik Sağlayıcı Örneği

Aşağıda, android uygulamalarında İçerik Sağlayıcı kullanma örneği verilmiştir. Burada android uygulamasına veri eklemek ve bunlara erişmek için kendi içerik sağlayıcımızı oluşturacağız.

Android studio kullanarak yeni bir android uygulaması oluşturun ve ContentProvider olarak isim verin. Android stüdyosunda bir uygulama oluşturmanın farkında değilseniz, Android Hello World App makalesine bakın.

Şimdi, gerçek sağlayıcımızı ve bununla ilgili yöntemleri tanımlamak için srcmainjavacom.tutlane.contentprovider yolunda kendi UserProvider.java içerik sağlayıcı dosyamızı oluşturmamız gerekiyor. Java Sınıfı ve UserProvider.java olarak isim verin.

UserProvider.java adlı yeni bir dosya oluşturduğumuzda, onu açın ve aşağıdaki gibi kodu yazın.

UserProvider.java

Şimdi \src\main\res\layout yolundan bir activity_main.xml dosyası açın ve aşağıdaki gibi kodu yazın.

activity_main.xml

Şimdi MainActivity.java dosyasını açın ve aşağıdaki gibi kodu yazın.

MainActivity.java 

Bu yeni oluşturulan içerik sağlayıcıyı, aşağıda gösterildiği gibi <provider> özniteliğini kullanarak android manifest dosyasına (ActivityManifest.xml) dahil etmemiz gerekiyor.

AndroidManifest.xml

Android İçerik Sağlayıcı Örneğinin Çıktısı

Yukarıdaki örneği Android emulatöründe çalıştırdığımızda, aşağıda gösterildiği gibi bir sonuç elde edeceğiz.

Diğer uygulamaların gereksinimlerimize göre erişmesine izin vermek için verileri merkezi bir konumda depolamak için android uygulamamızdaki içerik sağlayıcıları bu şekilde kullanabiliriz.

Yorum yap