Sobes.tech
Middle

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ą