Sobes.tech
Middle

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