Дар бораи қабулкунандагон ва таъминкунандагони мундариҷа дар 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 от системата | Предоставят данни по заявка |