Sobes.tech
Middle

Խոսեք 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-ի միջոցով
Տեսողական ներկայացում Չկա Չկա
Մուտք Սիստեմից ստացված նպատակային հաղորդագրություններ Դատավարության ժամանակ տրամադրում է տվյալներ