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.xmlda 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 |