Sobes.tech
Middle

Дар бораи қабулкунандагон ва таъминкунандагони мундариҷа дар Android гап занед.

sobes.tech AI

Ҷавоб аз AI

Прийомни (Broadcast Receivers) реагират на общосистемни широковещателни съобщения, като например уведомления за ниско ниво на батерията, свързване към мрежа или заснемане на снимка. Те нямат визуален интерфейс и изпълняват задачи на заден план.

Има два основни типа:

  • Статично регистрирани: Обявяват се в AndroidManifest.xml. Системата стартира приложението при получаване на съответния intent, дори ако то не е стартирано.
  • Динамично регистрирани: Регистрират се в кода чрез Context.registerReceiver(). Работят само докато съществува компонент (например активност).

Всеки приемник реализира метода onReceive(Context context, Intent intent), където се обработва входящият intent.

Content доставчиците (Content Providers) управляват споделения достъп до структурирани данни. Те предоставят стандартизиран интерфейс CRUD (Create, Read, Update, Delete) за взаимодействие с данните, съхранявани в различни източници (SQLite бази данни, файлове, мрежови данни и др.).

Основните методи на content доставчика:

  • onCreate(): Инициализация на доставчика.
  • query(): Получаване на данни.
  • insert(): Добавяне на нови данни.
  • update(): Актуализиране на съществуващи данни.
  • delete(): Изтриване на данни.
  • getType(): Връща MIME тип на данните по даден URI.

Достъпът до content доставчика се осъществява чрез ContentResolver. URI (Unified Resource Identifier) се използва за идентифициране на конкретен набор от данни.

Пример за използване на ContentResolver за заявка на данни:

// Uri за таблицата с контакти
Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;

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

// Заявка за данни
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));
        // Обработка на данните
    }
    cursor.close();
}

Пример за статична регистрация на приемник в 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>

Пример за реализиране на приемник:

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
            // Изпълнение на действия при ниска батерия
        }
    }
}

Ключови разлики:

Характеристика Broadcast Receivers Content Providers
Назначение Реакция на широковещателни събития Управление на достъпа до данни
Интерфейс onReceive() CRUD методи чрез ContentResolver
Визуално представяне Не съществува Не съществува
Достъп Получават intents от системата Предоставят данни по заявка