Sobes.tech
Middle

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