Sobes.tech
Middle

Pastāstiet par uztvērējiem un satura nodrošinātājiem Android.

sobes.tech AI

Atbilde no AI

Saņēmēji (Broadcast Receivers) reaģē uz sistēmas koplietojamiem ziņojumiem, piemēram, par zemu akumulatora uzlādi, tīkla savienojumu vai fotoattēlu uzņemšanu. Tie nav vizuāla interfeisa un veic fonu uzdevumus.

Ir divi galvenie tipi:

  • Statiska reģistrācija: deklarēta AndroidManifest.xml. Sistēma palaidīs lietotni, saņemot atbilstošu intenci, pat ja tā nav palaista.
  • Dinamiski reģistrēta: reģistrēta kodā ar Context.registerReceiver(). Darbojas tikai tik ilgi, kamēr komponents (piemēram, aktivitāte) pastāv.

Katrs saņēmējs realizē metodi onReceive(Context context, Intent intent), kurā apstrādā ienākošo intenci.

Saturs- nodrošinātāji (Content Providers) pārvalda kopēju piekļuvi strukturētajiem datiem. Tie nodrošina standartizētu CRUD (Create, Read, Update, Delete) interfeisu, lai mijiedarbotos ar datiem, kas glabājas dažādos avotos (SQLite datu bāzes, faili, tīkla dati utt.).

Galvenās saturs-nodrošinātāja metodes:

  • onCreate(): nodrošinātāja inicializācija.
  • query(): datu iegūšana no avota.
  • insert(): jaunu datu pievienošana.
  • update(): esošo datu atjaunināšana.
  • delete(): datu dzēšana.
  • getType(): atgriež MIME tipu datiem pēc šī URI.

Piekļuve saturs-nodrošinātājam tiek veikta caur ContentResolver. URI (Unified Resource Identifier) tiek izmantots konkrēta datu kopuma identifikācijai.

Piemērs, kā izmantot ContentResolver datu pieprasījumam:

// URI kontaktu tabulai
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

String[] projection = {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME
};

// Datu pieprasījums
Cursor cursor = getContentResolver().query(
    contactsUri,
    projection,
    null, // atlase
    null, // atlasesArgs
    null  // kārtošanas secība
);

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));
        // Datu apstrāde
    }
    cursor.close();
}

Statiskas reģistrācijas piemērs 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>

Saņēmēja realizācijas piemērs:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Darbības, kad ir zems akumulatora līmenis
        }
    }
}

Galvenās atšķirības:

Raksturlielums Saņēmēji (Broadcast Receivers) Saturs-nodrošinātāji (Content Providers)
Mērķis Reaģēt uz koplietojamiem notikumiem Pārvaldīt piekļuvi datiem
Interfeiss onReceive() CRUD metodes caur ContentResolver
Vizuālais attēlojums Nav Nav
Piekļuve Saņem intentes no sistēmas Nodrošina datus pēc pieprasījuma