გააზიარეთ Android-ის მიმღებებისა და კონტენტ-პროვაიდერების შესახებ.
sobes.tech AI
პასუხი AI-სგან
რეცივერები (Broadcast Receivers) რეაგირებენ სისტემის ზოგადშესახებ შეტყობინებებზე, მაგალითად, დაბალი ბატარეის სიგნალი, ქსელის დაკავშირება ან ფოტოების გადაღება. მათ არ აქვთ ვიზუალური ინტერფეისი და ისინი ახორციელებენ ფონურ დავალებებს.
არსებობს ორი ძირითადი ტიპი:
- სტატიკური რეგისტრაცია: გამოაცხადება
AndroidManifest.xml-ში. სისტემა იწყებს აპლიკაციას შესაბამის ინტენტზე, მაშინაც კი, თუ ის არ არის გახსნილი. - დინამიკური რეგისტრაცია: რეგისტრაცია ხდება კოდში
Context.registerReceiver()-ის გამოყენებით. მუშაობს მხოლოდ მაშინ, როდესაც კომპონენტი (მაგალითად, აქტივობა) არსებობს.
ყოველი რეცივერი ახორციელებს მეთოდს onReceive(Context context, Intent intent), სადაც ხდება შემომავალი ინტენტის დამუშავება.
კონტენტ-პროვაიდერები (Content Providers) მართავენ საერთო წვდომას სტრუქტურირებულ მონაცემებზე. ისინი უზრუნველყოფენ სტანდარტიზებულ ინტერფეისს CRUD (Create, Read, Update, Delete) ოპერაციებისთვის, რათა ურთიერთქმედება მოხდეს მონაცემებთან, რომლებიც ინახება სხვადასხვა წყაროებში (SQLite ბაზები, ფაილები, ქსელური მონაცემები და ა.შ.).
ძირითადი მეთოდები კონტენტ-პროვაიდერში:
onCreate(): პროვაიდერის ინიციალიზაცია.query(): მონაცემების მიღება წყაროდან.insert(): ახალი მონაცემების დამატება.update(): არსებული მონაცემების განახლება.delete(): მონაცემების წაშლა.getType(): MIME ტიპის დაბრუნება ამ URI-სთვის.
მომხმარებელი წვდომა მიიღება 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-ის საშუალებით |
| ვიზუალური გამოსახულება | არ არსებობს | არ არსებობს |
| წვდომა | იღებს სისტემიდან ინტენთებს | უზრუნველყოფს მონაცემებს მოთხოვნის საფუძველზე |