Sobes.tech
Middle

Android'dagi qabul qiluvchilar va kontent ta'minotchilari haqida gapiring.

sobes.tech AI

AIdan javob

Tarqatuvchilar (Broadcast Receivers) tizim bo'ylab keng tarqaladigan xabarlarni, masalan, batareyaning pastligi, tarmoq ulanishi yoki suratga olish haqida bildirishnomalarni javob beradi. Ular vizual interfeysga ega emas va fon vazifalarini bajaradi.

Asosiy ikki tur mavjud:

  • Statik tarzda ro'yxatdan o'tganlar: AndroidManifest.xml da e'lon qilinadi. Tizim mos keladigan intentni olganda, hatto ishga tushmagan bo'lsa ham, ilovani ishga tushiradi.
  • Dinamik tarzda ro'yxatdan o'tganlar: Kodda Context.registerReceiver() yordamida ro'yxatdan o'tkaziladi. Faqat komponent (masalan, faoliyat) mavjud bo'lsa ishlaydi.

Har bir qabul qiluvchi onReceive(Context context, Intent intent) metodini amalga oshiradi, bu yerda kiruvchi intentni qayta ishlash amalga oshiriladi.

Content Providers (Mazmun ta'minotchilar) tuzilgan ma'lumotlarga umumiy kirishni boshqaradi. Ular ma'lumotlar bilan CRUD (Create, Read, Update, Delete) standart interfeysini taqdim etadi va turli manbalarda (SQLite bazalari, fayllar, tarmoq ma'lumotlari va boshqalar) saqlangan ma'lumotlar bilan ishlashadi.

Content Provider ning asosiy metodlari:

  • onCreate(): Ta'minotchini boshlash.
  • query(): Manbadan ma'lumot olish.
  • insert(): Yangi ma'lumot qo'shish.
  • update(): Mavjud ma'lumotlarni yangilash.
  • delete(): Ma'lumotlarni o'chirish.
  • getType(): Bu URI uchun MIME turini qaytaradi.

Content Provider ga kirish ContentResolver orqali amalga oshiriladi. URI (Birlashtirilgan Resurs Identifikatori) ma'lum bir ma'lumotlar to'plamini aniqlash uchun ishlatiladi.

ContentResolver yordamida ma'lumotlarni so'rov qilish misoli:

// Kontaktlar jadvali uchun Uri
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

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

// Ma'lumotlarni so'rov qilish
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // tanlov
    null, // tanlov argumentlari
    null  // tartib
);

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));
        // Ma'lumotlarni qayta ishlash
    }
    cursor.close();
}

Statik broadcast receiver ni AndroidManifest.xml da ro'yxatdan o'tkazish misoli:

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

Receiver ni amalga oshirish misoli:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Past batareya uchun amal qilish
        }
    }
}

Asosiy farqlar:

Xususiyat Broadcast Receivers Content Providers
Maqsad Keng tarqaladigan voqealarga javob berish Ma'lumotlarga kirishni boshqarish
Interfeys onReceive() CRUD metodlari ContentResolver orqali
Vizual ko'rsatish Yo'q Yo'q
Kirish Tizimdan intentlarni qabul qilish So'rov bo'yicha ma'lumotlarni taqdim etish