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 |