Papaskokite apie imtuvus ir turinio teikėjus Android.
sobes.tech AI
Atsakymas iš AI
Gavėjai (Broadcast Receivers) reaguoja į bendrosios sistemos transliacinius pranešimus, pavyzdžiui, apie žemą baterijos įkrovą, tinklo prisijungimą ar nuotraukų darymą. Jie neturi vizualinio sąsajos ir vykdo foninius uždavinius.
Yra du pagrindiniai tipai:
- Statinė registracija: deklaruojama
AndroidManifest.xml. Sistema paleidžia programą, gavusi atitinkamą intenciją, net jei ji nėra įjungta. - Dinaminė registracija: registruojama kode naudojant
Context.registerReceiver(). Veikia tik tol, kol komponentas (pvz., veikla) egzistuoja.
Kiekvienas gavėjas įgyvendina metodą onReceive(Context context, Intent intent), kuriame apdorojamas įeinantis intencijos veiksmas.
Turinio teikėjai (Content Providers) valdo bendrą prieigą prie struktūrizuotų duomenų. Jie teikia standartizuotą CRUD (Create, Read, Update, Delete) sąsają, leidžiančią sąveikauti su duomenimis, saugomais įvairiuose šaltiniuose (SQLite duomenų bazės, failai, tinklo duomenys ir kt.).
Pagrindiniai turinio teikėjo metodai:
onCreate(): teikėjo inicializavimas.query(): duomenų gavimas iš šaltinio.insert(): naujų duomenų įterpimas.update(): esamų duomenų atnaujinimas.delete(): duomenų ištrynimas.getType(): grąžina MIME tipo duomenims pagal šį URI.
Prieiga prie turinio teikėjo vykdoma per ContentResolver. URI (Unified Resource Identifier) naudojamas konkrečiam duomenų rinkiniui identifikuoti.
Pavyzdys, kaip naudoti ContentResolver duomenų užklausai:
// URI kontaktų lentelei
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Duomenų užklausa
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));
// Duomenų apdorojimas
}
cursor.close();
}
Statinės gavėjo registracijos pavyzdys 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>
Gavėjo įgyvendinimo pavyzdys:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Veiksmai, kai baterija yra žema
}
}
}
Pagrindiniai skirtumai:
| Charakteristika | Gavėjai (Broadcast Receivers) | Turinio teikėjai (Content Providers) |
|---|---|---|
| Paskirtis | Reaguoja į transliacinius įvykius | Valdo prieigą prie duomenų |
| Sąsaja | onReceive() |
CRUD metodai per ContentResolver |
| Vizualinis vaizdas | Nėra | Nėra |
| Prieiga | Gaukia intentes iš sistemos | Teikia duomenis pagal užklausą |