Povedzte o prijímačoch a poskytovateľoch obsahu v Androide.
sobes.tech AI
Odpoveď od AI
Prijímače (Broadcast Receivers) reagujú na všeobecné systémové broadcast správy, ako sú upozornenia o nízkej úrovni batérie, pripojení k sieti alebo fotografovaní. Nemajú vizuálne rozhranie a vykonávajú úlohy na pozadí.
Existujú dva hlavné typy:
- Staticky registrované: Sú deklarované v
AndroidManifest.xml. Systém spustí aplikáciu pri prijatí príslušného intentu, aj keď nie je spustená. - Dynamicky registrované: Sú registrované v kóde pomocou
Context.registerReceiver(). Fungujú iba pokiaľ komponenta (napríklad aktivita) existuje.
Každý prijímač implementuje metódu onReceive(Context context, Intent intent), kde sa spracováva prichádzajúci intent.
Content poskytovatelia (Content Providers) spravujú spoločný prístup ku štruktúrovaným údajom. Poskytujú štandardné rozhranie CRUD (Create, Read, Update, Delete) na interakciu s údajmi uloženými v rôznych zdrojoch (SQLite databázy, súbory, sieťové údaje atď.).
Hlavné metódy content poskytovateľa:
onCreate(): Inicializácia poskytovateľa.query(): Získanie údajov zo zdroja.insert(): Pridanie nových údajov.update(): Aktualizácia existujúcich údajov.delete(): Vymazanie údajov.getType(): Vráti MIME typ údajov podľa daného URI.
Prístup k content poskytovateľovi sa vykonáva cez ContentResolver. URI (Unified Resource Identifier) sa používa na identifikáciu konkrétneho súboru údajov.
Príklad použitia ContentResolver na dotazovanie údajov:
// Uri pre tabuľku kontaktov
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Dotaz na údaje
Cursor cursor = getContentResolver().query(
contactsUri,
projection,
null, // selection
null, // selectionArgs
null // sortOrder
);
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));
// Spracovanie údajov
}
cursor.close();
}
Príklad registrácie statického prijímača v AndroidManifest.xml:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
Príklad implementácie prijímača:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Vykonanie akcií pri nízkej úrovni batérie
}
}
}
Kľúčové rozdiely:
| Charakteristika | Broadcast Receivers | Content Providers |
|---|---|---|
| Účel | Reakcia na broadcast udalosti | Správa prístupu k údajom |
| Rozhranie | onReceive() |
CRUD metódy cez ContentResolver |
| Vizuálne zobrazenie | Neexistuje | Neexistuje |
| Prístup | Dostávajú intent-y zo systému | Poskytujú údaje na požiadanie |