Sobes.tech
Middle

Android'deki alıcılar ve içerik sağlayıcıları hakkında bilgi verin.

sobes.tech yapay zeka

AI'dan gelen yanıt

Yayın Alıcıları (Broadcast Receivers), sistem genelinde yayınlanan mesajlara tepki verir, örneğin düşük pil uyarıları, ağ bağlantısı veya fotoğraf çekme gibi. Görsel arayüzleri yoktur ve arka planda görev yaparlar.

İki ana türü vardır:

  • Statik kaydedilenler: AndroidManifest.xml içinde ilan edilirler. Sistem, ilgili intent alındığında uygulamayı başlatır, hatta çalışmıyorsa bile.
  • Dinamik kaydedilenler: Kod içinde Context.registerReceiver() kullanılarak kaydedilirler. Sadece bileşen (örneğin, aktivite) var olduğu sürece çalışırlar.

Her alıcı, gelen intent'i işlerken onReceive(Context context, Intent intent) metodunu uygular.

İçerik sağlayıcıları (Content Providers), yapılandırılmış verilere ortak erişimi yönetir. Verilerle etkileşim için standartlaştırılmış CRUD (Create, Read, Update, Delete) arayüzü sağlarlar ve çeşitli kaynaklarda (SQLite veritabanları, dosyalar, ağ verileri vb.) saklanan verilerle çalışırlar.

İçerik sağlayıcısının temel metodları:

  • onCreate(): Sağlayıcıyı başlatır.
  • query(): Kaynaktan veri alır.
  • insert(): Yeni veri ekler.
  • update(): Mevcut veriyi günceller.
  • delete(): Veriyi siler.
  • getType(): Bu URI için MIME türünü döner.

İçerik sağlayıcıya erişim, ContentResolver aracılığıyla yapılır. URI (Birleşik Kaynak Tanımlayıcısı), belirli bir veri kümesini tanımlar.

ContentResolver kullanarak veri sorgulama örneği:

// Kişi tablosu için Uri
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
};

// Veri sorgulama
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // seçim
    null, // seçim argümanları
    null  // sıralama
);

if (cursor != null) {
    while (cursor.moveToNext()) {
        long contactId = cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
        String displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
        // Veri işleme
    }
    cursor.close();
}

AndroidManifest.xml içinde statik yayın alıcısı kaydı örneği:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

Alıcı sınıfı örneği:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Düşük pil durumu için yapılacaklar
        }
    }
}

Ana farklar:

Özellik Yayın Alıcıları (Broadcast Receivers) İçerik Sağlayıcılar (Content Providers)
Amaç Yayınlanmış olaylara tepki verme Verilere erişimi yönetme
Arayüz onReceive() fonksiyonu CRUD metodları ContentResolver ile
Görsel Yok Yok
Erişim Sistemden intent alırlar Talep üzerine veri sağlarlar