Sobes.tech
Middle

Реци о пријемницима и провајдерима садржаја у Android-у.

sobes.tech АИ

Одговор од АИ

Prijemnici (Broadcast Receivers) reaguju na opšte sistemske broadcast poruke, kao što su obaveštenja o niskom nivou baterije, povezivanju na mrežu ili fotografisanju. Nemaju vizuelni interfejs i obavljaju zadatke u pozadini.

Postoje dve glavne vrste:

  • Statistički registrovani: Deklarišu se u AndroidManifest.xml. Sistem pokreće aplikaciju pri primanju odgovarajućeg intent-a, čak i ako nije pokrenuta.
  • Dinamički registrovani: Registruju se u kodu pomoću Context.registerReceiver(). Funkcionišu samo dok postoji komponenta (npr. aktivnost).

Svaki prijemnik implementira metodu onReceive(Context context, Intent intent), gde se obrađuje ulazni intent.

Content provideri (Content Providers) upravljaju zajedničkim pristupom strukturiranim podacima. Oni pružaju standardni interfejs CRUD (Create, Read, Update, Delete) za interakciju sa podacima koji se čuvaju u različitim izvorima (SQLite baze, fajlovi, mrežni podaci itd.).

Glavne metode content providera:

  • onCreate(): Inicijalizacija providera.
  • query(): Dobijanje podataka iz izvora.
  • insert(): Dodavanje novih podataka.
  • update(): Ažuriranje postojećih podataka.
  • delete(): Brisanje podataka.
  • getType(): Vraća MIME tip podataka za dati URI.

Pristup content provider-u se vrši putem ContentResolver. URI (Unified Resource Identifier) se koristi za identifikaciju konkretnog skupa podataka.

Primer korišćenja ContentResolver za upit podataka:

// Uri za tabelu kontakata
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

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

// Upit podataka
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));
        // Obrada podataka
    }
    cursor.close();
}

Primer registracije statičkog prijemnika u 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>

Primer implementacije prijemnika:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Izvršavanje radnji pri niskom nivou baterije
        }
    }
}

Ključne razlike:

Karakteristika Broadcast Receivers Content Providers
Svrha Reakcija na broadcast događaje Upravljanje pristupom podacima
Interfejs onReceive() CRUD metode preko ContentResolver
Vizuelni prikaz Ne postoji Ne postoji
Pristup Dobijaju intent-ove iz sistema Obrađuju podatke na zahtev