Sobes.tech
Middle

Beszélj az Android-es vevőkről és tartalom-szolgáltatókról.

sobes.tech MI

Válasz az MI-től

A Broadcast Receiver-ek reagálnak a rendszer által küldött általános broadcast üzenetekre, például alacsony akkumulátorszint, hálózati csatlakozás vagy fénykép készítése esetén. Nincs vizuális felületük, és háttérfeladatokat látnak el.

Két fő típusuk van:

  • Statikusan regisztráltak: Az AndroidManifest.xml-ben vannak megadva. A rendszer elindítja az alkalmazást, amikor a megfelelő intent érkezik, még akkor is, ha az nem fut.
  • Dinamikusan regisztráltak: A kódban a Context.registerReceiver() segítségével regisztrálják őket. Csak addig működnek, amíg a komponens (pl. aktivitás) létezik.

Minden receiver megvalósítja az onReceive(Context context, Intent intent) metódust, ahol a bejövő intentet feldolgozzák.

A Content Provider-ek közös hozzáférést biztosítanak strukturált adatokhoz. Szabványos CRUD (Create, Read, Update, Delete) interfészt nyújtanak az adatokkal való interakcióhoz, amelyek különböző forrásokban (SQLite adatbázisok, fájlok, hálózati adatok stb.) tárolódnak.

A fő metódusok:

  • onCreate(): A provider inicializálása.
  • query(): Adatok lekérdezése.
  • insert(): Új adatok hozzáadása.
  • update(): Létező adatok frissítése.
  • delete(): Adatok törlése.
  • getType(): A megadott URI MIME-típusát adja vissza.

A hozzáférés a ContentResolver-en keresztül történik. Az URI (Unified Resource Identifier) azonosítja a konkrét adatkészletet.

Példa a ContentResolver használatára adatok lekérdezéséhez:

// Kapcsolatok táblájának URI-ja
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

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

// Adatok lekérdezése
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // kiválasztás
    null, // kiválasztási argumentumok
    null  // rendezés
);

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));
        // Adatok feldolgozása
    }
    cursor.close();
}

Statikus broadcast receiver regisztráció példája az AndroidManifest.xml-ben:

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

A receiver implementáció példája:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Akkumulátor alacsony szintje esetén végrehajtandó műveletek
        }
    }
}

Főbb különbségek:

Jellemző Broadcast Receivers Content Providers
Cél Broadcast eseményekre reagálás Adatok hozzáférésének kezelése
Interfész onReceive() CRUD metódusok ContentResolver-en keresztül
Vizuális megjelenítés Nincs Nincs
Hozzáférés Rendszertől kapott intent-ek Kérésre szolgáltat adatokat