Խոսեք Android-ում ընդունիչների և բովանդակության մատակարարների մասին։
sobes.tech AI
Պատասխան AI-ից
Հաղորդիչները (Broadcast Receivers) արձագանքում են համակարգային լայնարձակ հաղորդագրություններին, օրինակ՝ մարտկոցի ցածր մակարդակի մասին ծանուցումներին, ցանցին միացման կամ լուսանկարչության մասին։ Նրանք չունեն տեսողական ինտերֆեյս և իրականացնում են ֆոնային առաջադրանքներ:
Կան երկու հիմնական տեսակ.
- Կայուն գրանցված: Հայտարարվում են
AndroidManifest.xml-ում։ Սիստեմը սկսում է հավելվածը համապատասխան նպատակային հաղորդագրության ստացման ժամանակ, նույնիսկ եթե այն չի գործարկված։ - Դինամիկ գրանցված: Գրանցվում են կոդում
Context.registerReceiver()-ի միջոցով։ Աշխատում են միայն այն ժամանակ, երբ բաղադրիչը (օրինակ՝ ակտիվությունը) գոյություն ունի։
Յուրաքանչյուր ընդունիչ իրականացնում է onReceive(Context context, Intent intent) մեթոդը, որտեղ մշակվում է մուտքային նպատակային հաղորդագրությունը։
Content մատակարարները (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-ի միջոցով |
| Տեսողական ներկայացում | Չկա | Չկա |
| Մուտք | Սիստեմից ստացված նպատակային հաղորդագրություններ | Դատավարության ժամանակ տրամադրում է տվյալներ |