Rääkige Androidi vastuvõtjate ja sisuteenuse pakkujate kohta.
sobes.tech AI
Vastus AI-lt
Saajad (Broadcast Receivers) reageerivad süsteemi üldistele sõnumitele, näiteks madala aku taseme, võrguühenduse või pildistamise kohta. Neil puudub visuaalne liides ning nad täidavad taustal ülesandeid.
On kaks peamist tüüpi:
- Statiline registreerimine: deklareeritud
AndroidManifest.xml-s. Süsteem käivitab rakenduse vastava intentsiooni saamisel, isegi kui see ei ole avatud. - Dünaamiline registreerimine: registreeritakse koodis
Context.registerReceiver()abil. Töötavad ainult seni, kuni komponent (näiteks aktiivsus) eksisteerib.
Iga vastuvõtja rakendab meetodi onReceive(Context context, Intent intent), kus töödeldakse sisenevat intenti.
Sisu-teenuse pakkujad (Content Providers) haldavad üldist juurdepääsu struktureeritud andmetele. Nad pakuvad standardiseeritud CRUD (Create, Read, Update, Delete) liidest, mis võimaldab andmetega suhelda erinevatest allikatest (SQLite andmebaasid, failid, võrgud ja nii edasi).
Sisu-teenuse pakkuja põhimeetodid:
onCreate(): pakkuja initsialiseerimine.query(): andmete saamine allikast.insert(): uute andmete lisamine.update(): olemasolevate andmete uuendamine.delete(): andmete kustutamine.getType(): tagastab MIME-tüübi selle URI andmetele.
Juhtmeühendus sisu-teenuse pakkujaga toimub ContentResolver kaudu. URI (Unified Resource Identifier) kasutatakse konkreetse andmekogumi identifitseerimiseks.
Näide ContentResolver kasutamisest andmete päringuks:
// Kontaktide tabeli URI
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME
};
// Andmete päring
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));
// Andmete töötlemine
}
cursor.close();
}
Näide statilise vastuvõtja registreerimisest AndroidManifest.xml-s:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
Näide vastuvõtja rakendamisest:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
// Tegevused aku madala taseme korral
}
}
}
Peamised erinevused:
| Omadus | Saajad (Broadcast Receivers) | Sisu-teenuse pakkujad (Content Providers) |
|---|---|---|
| Otstarve | Reageerivad transiidiüritustele | Andmetele juurdepääsu haldamine |
| Liides | onReceive() |
CRUD meetodid ContentResolver-i kaudu |
| Vizuaalne kuvamine | Puudub | Puudub |
| Juurdepääs | Saavad süsteemilt intente | Pakuvad andmeid päringule vastavalt |