- نحو:
<provider android:authorities="list" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"] android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" > ... </provider>
- مندرج در:
-
<application> - میتواند شامل موارد زیر باشد:
-
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property> - شرح:
- یک کامپوننت ارائه دهنده محتوا را تعریف میکند. ارائه دهنده محتوا زیرکلاسی از
ContentProviderاست که دسترسی ساختاریافته به دادههای مدیریت شده توسط برنامه را فراهم میکند. همه ارائه دهندگان محتوا در برنامه شما باید در یک عنصر<provider>در فایل مانیفست تعریف شوند. در غیر این صورت، سیستم از آنها بیاطلاع است و آنها را اجرا نمیکند.فقط ارائه دهندگان محتوایی را تعریف کنید که بخشی از برنامه شما هستند. ارائه دهندگان محتوایی را که در برنامه خود استفاده میکنید، در برنامههای دیگر تعریف نکنید.
سیستم اندروید ارجاعات به ارائهدهندگان محتوا را بر اساس یک رشتهی اعتبارسنجی ، که بخشی از URI محتوای ارائهدهنده است، ذخیره میکند. برای مثال، فرض کنید میخواهید به یک ارائهدهندهی محتوا که اطلاعات مربوط به متخصصان مراقبتهای بهداشتی را ذخیره میکند، دسترسی پیدا کنید. برای انجام این کار، متد
ContentResolver.query()را فراخوانی میکنید که یک URI را دریافت میکند که ارائهدهنده را شناسایی میکند، در کنار سایر آرگومانها:content://com.example.project.healthcareprovider/nurses/rn
طرح
content:URI را به عنوان یک URI محتوا که به یک ارائهدهنده محتوای اندروید اشاره میکند، شناسایی میکند. مرجعcom.example.project.healthcareproviderخود ارائهدهنده را شناسایی میکند. سیستم اندروید، مرجع را در لیست ارائهدهندگان شناختهشده و مجوزهای آنها جستجو میکند. زیررشتهnurses/rnمسیری است که ارائهدهنده محتوا برای شناسایی زیرمجموعههای دادههای ارائهدهنده از آن استفاده میکند.وقتی ارائهدهندهی خود را در عنصر
<provider>تعریف میکنید، طرح یا مسیر را در آرگومانandroid:nameوارد نمیکنید، فقط اعتبار را وارد میکنید.برای اطلاعات بیشتر در مورد استفاده و توسعه ارائه دهندگان محتوا، به ارائه دهندگان محتوا مراجعه کنید.
- ویژگیها:
-
android:authorities - فهرستی از یک یا چند مرجع URI که دادههای ارائه شده توسط ارائهدهنده محتوا را شناسایی میکنند. چندین مرجع را با جدا کردن نامهای آنها با نقطه ویرگول فهرست کنید. برای جلوگیری از تداخل، از یک قرارداد نامگذاری به سبک جاوا برای نامهای مرجع، مانند
com.example.provider.cartoonprovider، استفاده کنید. معمولاً، این نام زیرکلاسContentProviderاست که ارائهدهنده را پیادهسازی میکند.هیچ پیشفرضی وجود ندارد. حداقل یک مرجع باید مشخص شود.
-
android:enabled - اینکه آیا ارائهدهنده محتوا میتواند توسط سیستم نمونهسازی شود یا خیر. اگر بتواند،
"true"و در غیر این صورت"false"است. مقدار پیشفرض"true"است.عنصر
<application>ویژگیenabledبه خود را دارد که برای همه اجزای برنامه، از جمله ارائه دهندگان محتوا، اعمال میشود. ویژگیهای<application>و<provider>هر دو باید"true"باشند، زیرا هر دو به طور پیشفرض هستند تا ارائه دهنده محتوا فعال شود. اگر هر کدام"false"باشد، ارائه دهنده غیرفعال است. نمیتوان آن را نمونهسازی کرد. -
android:directBootAware اینکه آیا ارائهدهنده محتوا از قابلیت بوت مستقیم (Direct-Boot) پشتیبانی میکند یا خیر - یعنی اینکه آیا میتواند قبل از باز کردن قفل دستگاه توسط کاربر، اجرا شود.
نکته: در طول بوت مستقیم ، یک ارائهدهنده محتوا در برنامه شما فقط میتواند به دادههایی که در حافظه محافظتشده دستگاه ذخیره شدهاند، دسترسی داشته باشد.
مقدار پیشفرض
"false"است.-
android:exported - اینکه آیا ارائهدهنده محتوا برای استفاده سایر برنامهها در دسترس است یا خیر.
-
"true": ارائهدهنده برای سایر برنامهها در دسترس است. هر برنامهای میتواند از URI محتوای ارائهدهنده برای دسترسی به آن استفاده کند، البته با توجه به مجوزهای مشخص شده برای ارائهدهنده. -
"false": این ارائهدهنده برای سایر برنامهها در دسترس نیست. برای محدود کردن دسترسی برنامههای خود به ارائهدهنده،android:exported="false"را تنظیم کنید. فقط برنامههایی که شناسه کاربری (UID) یکسانی با ارائهدهنده دارند، یا برنامههایی که از طریق عنصرandroid:grantUriPermissionsبه طور موقت به ارائهدهنده دسترسی دارند، به آن دسترسی دارند.
از آنجا که این ویژگی در API سطح ۱۷ معرفی شده است، تمام دستگاههایی که API سطح ۱۶ و پایینتر را اجرا میکنند، طوری رفتار میکنند که انگار این ویژگی روی
"true"تنظیم شده است. اگرandroid:targetSdkVersionرا روی ۱۷ یا بالاتر تنظیم کنید، مقدار پیشفرض برای دستگاههایی که API سطح ۱۷ و بالاتر را اجرا میکنند،"false"است.شما میتوانید
android:exported="false"تنظیم کنید و همچنان با تنظیم مجوزها با ویژگیpermissionدسترسی به ارائهدهنده خود را محدود کنید. -
-
android:grantUriPermissions اینکه آیا به کسانی که معمولاً مجوز دسترسی به دادههای ارائهدهنده محتوا را ندارند، میتوان اجازه این کار را داد یا خیر، و موقتاً بر محدودیت اعمال شده توسط ویژگیهای
readPermission،writePermission،permissionوexportedغلبه کرد.اگر مجوز قابل اعطا باشد، مقدار آن
"true"و در غیر این صورت"false"است. اگر"true"، میتوان به هر یک از دادههای ارائهدهنده محتوا مجوز داد. اگر"false"، فقط میتوان به زیرمجموعههای دادهای که در زیرعناصر<grant-uri-permission>فهرست شدهاند، در صورت وجود، مجوز داد. مقدار پیشفرض"false"است.اعطای مجوز، روشی برای دادن دسترسی یکباره به دادههای محافظتشده توسط یک مجوز به یک جزء برنامه است. برای مثال، هنگامی که یک پیام ایمیل حاوی پیوستی است، برنامه ایمیل ممکن است از بیننده مناسب برای باز کردن آن استفاده کند، حتی اگر بیننده مجوز عمومی برای مشاهده تمام دادههای ارائهدهنده محتوا را نداشته باشد.
در چنین مواردی، مجوز توسط پرچمهای
FLAG_GRANT_READ_URI_PERMISSIONوFLAG_GRANT_WRITE_URI_PERMISSIONدر شیءIntentکه کامپوننت را فعال میکند، اعطا میشود. برای مثال، برنامه ایمیل ممکن استFLAG_GRANT_READ_URI_PERMISSIONدرIntentارسالی بهContext.startActivity()قرار دهد. این مجوز مختص URI درIntentاست.اگر این ویژگی را فعال کنید، چه با تنظیم این ویژگی روی
"true"و چه با تعریف زیرعنصرهای<grant-uri-permission>، وقتی یک URI تحت پوشش از ارائهدهنده حذف میشود،Context.revokeUriPermission()را فراخوانی کنید.همچنین به عنصر
<grant-uri-permission>مراجعه کنید.-
android:icon - یک آیکون که نشاندهندهی ارائهدهندهی محتوا است. این ویژگی به عنوان مرجعی برای یک منبع قابل ترسیم که شامل تعریف تصویر است، تنظیم میشود. اگر تنظیم نشود، آیکون مشخص شده برای کل برنامه به جای آن استفاده میشود. برای اطلاعات بیشتر، به ویژگی
iconعنصر<application>مراجعه کنید. -
android:initOrder - ترتیبی که ارائهدهنده محتوا نسبت به سایر ارائهدهندگان محتوا که توسط همان فرآیند میزبانی میشوند، نمونهسازی میشود. هنگامی که بین ارائهدهندگان محتوا وابستگی وجود دارد، تنظیم این ویژگی برای هر یک از آنها تضمین میکند که آنها به ترتیب مورد نیاز آن وابستگیها ایجاد میشوند. مقدار یک عدد صحیح است و اعداد بالاتر ابتدا مقداردهی اولیه میشوند.
-
android:intentMatchingFlags از این ویژگی برای تنظیم دقیق نحوه تطبیق اهداف ورودی سیستم با اجزای برنامه استفاده کنید. به طور پیشفرض، هیچ قانون تطبیق خاصی اعمال نمیشود.
مقدار تنظیمشده روی برچسب
<provider>مقدار تنظیمشده روی برچسب<application>را لغو میکند.مقدار باید یک یا چند مورد از پرچمهای زیر باشد که با '
|' از هم جدا شدهاند:پرچم توضیحات noneتمام قوانین تطبیق ویژه را برای ورودیهای ورودی غیرفعال میکند. هنگام تعیین چندین پرچم، مقادیر متناقض با دادن اولویت به پرچم noneحل میشوند.enforceIntentFilterتطبیق سختگیرانهتری را برای اهداف ورودی اعمال میکند:
- اهداف صریح باید با فیلتر هدف کامپوننت هدف مطابقت داشته باشند.
- اینتنتهای بدون اکشن با هیچ فیلتر اینتنتی مطابقت ندارند.
allowNullActionقوانین تطبیق را آسان میکند تا به intent های بدون اکشن اجازه تطبیق داده شود. این پرچم همراه با
enforceIntentFilterبرای دستیابی به رفتار زیر استفاده میشود:- اهداف صریح باید با فیلتر هدف کامپوننت هدف مطابقت داشته باشند.
- اینتنتهای بدون اکشن مجاز به مطابقت با هر فیلتر اینتنتی هستند.
برای اطلاعات بیشتر، به بخش « اهداف امنتر» در تغییرات رفتاری اندروید ۱۶ (سطح API ۳۶) مراجعه کنید.
-
android:label - یک برچسب قابل خواندن توسط کاربر برای محتوای ارائه شده. اگر این ویژگی تنظیم نشده باشد، از برچسب تنظیم شده برای کل برنامه به جای آن استفاده میشود. برای اطلاعات بیشتر، به ویژگی
labelعنصر<application>مراجعه کنید.این برچسب معمولاً به عنوان مرجعی برای یک منبع رشتهای تنظیم میشود، به طوری که میتواند مانند سایر رشتهها در رابط کاربری بومیسازی شود. با این حال، برای راحتی در حین توسعه برنامه، میتوان آن را به عنوان یک رشته خام نیز تنظیم کرد.
-
android:multiprocess - اگر برنامه در چندین فرآیند اجرا شود، این ویژگی تعیین میکند که آیا چندین نمونه از ارائهدهنده محتوا ایجاد شده است یا خیر. اگر
"true"باشد، هر یک از فرآیندهای برنامه شیء ارائهدهنده محتوای خود را دارد. اگر"false"، فرآیندهای برنامه فقط یک شیء ارائهدهنده محتوا را به اشتراک میگذارند. مقدار پیشفرض"false"است.تنظیم این پرچم روی
"true"میتواند با کاهش سربار ارتباطات بین فرآیندی، عملکرد را بهبود بخشد، اما همچنین باعث افزایش فضای حافظه هر فرآیند میشود. -
android:name - نام کلاسی که ارائهدهنده محتوا را پیادهسازی میکند، یک زیرکلاس از
ContentProvider. این معمولاً یک نام کلاس کاملاً واجد شرایط است، مانند"com.example.project.TransportationProvider". با این حال، به عنوان یک اختصار، اگر اولین کاراکتر نام یک نقطه باشد، به نام بسته مشخص شده در عنصر<manifest>اضافه میشود.هیچ پیشفرضی وجود ندارد. نام باید مشخص شود.
-
android:permission نام مجوزی که کلاینتها برای خواندن یا نوشتن دادههای ارائهدهنده محتوا باید داشته باشند. این ویژگی، روشی مناسب برای تنظیم یک مجوز واحد برای خواندن و نوشتن است. با این حال، ویژگیهای
readPermission،writePermissionوgrantUriPermissionsبر این مجوز اولویت دارند.اگر ویژگی
readPermissionنیز تنظیم شده باشد، دسترسی برای پرسوجو از ارائهدهنده محتوا را کنترل میکند. اگر ویژگیwritePermissionتنظیم شده باشد، دسترسی برای تغییر دادههای ارائهدهنده را کنترل میکند.برای اطلاعات بیشتر در مورد مجوزها، به بخش مجوزها در نمای کلی مانیفست برنامه و نکات امنیتی مراجعه کنید.
-
android:process نام فرآیندی که ارائه دهنده محتوا در آن اجرا میشود. به طور معمول، تمام اجزای یک برنامه در فرآیند پیشفرض ایجاد شده برای برنامه اجرا میشوند. این فرآیند همان نام بسته برنامه را دارد.
ویژگی
processعنصر<application>میتواند پیشفرض متفاوتی را برای همه کامپوننتها تنظیم کند. اما هر کامپوننت میتواند پیشفرض را با ویژگیprocessخود لغو کند و به شما امکان دهد برنامه خود را در چندین فرآیند پخش کنید.اگر نام اختصاص داده شده به این ویژگی با یک دونقطه (
:شروع شود، یک فرآیند جدید، خصوصی برای برنامه، در صورت نیاز ایجاد میشود و فعالیت در آن فرآیند اجرا میشود.اگر نام فرآیند با یک کاراکتر کوچک شروع شود، فعالیت در یک فرآیند سراسری با آن نام اجرا میشود، مشروط بر اینکه مجوز انجام این کار را داشته باشد. این امر به اجزای برنامههای مختلف اجازه میدهد تا یک فرآیند را به اشتراک بگذارند و استفاده از منابع را کاهش دهند.
-
android:readPermission مجوزی که کلاینتها برای درخواست از ارائهدهنده محتوا باید داشته باشند.
اگر ارائهدهنده
android:grantUriPermissionsروی"true"تنظیم کند، یا اگر یک کلاینت خاص شرایط یک زیرعنصر<grant-uri-permission>را برآورده کند، کلاینت میتواند به طور موقت به دادههای ارائهدهنده محتوا دسترسی خواندن داشته باشد.همچنین به ویژگیهای
permissionوwritePermissionمراجعه کنید.-
android:syncable - اینکه آیا دادههای تحت کنترل ارائهدهنده محتوا میتوانند با دادههای روی سرور همگامسازی شوند یا خیر. اگر این امکان وجود داشته باشد، مقدار
"true"و در غیر این صورت"false"را برمیگرداند. -
android:writePermission مجوزی که کلاینتها برای ایجاد تغییر در دادههای کنترلشده توسط ارائهدهنده محتوا به آن نیاز دارند.
اگر ارائهدهنده
android:grantUriPermissionsروی"true"تنظیم کند، یا اگر یک کلاینت خاص شرایط یک زیرعنصر<grant-uri-permission>را برآورده کند، کلاینت میتواند دسترسی موقت نوشتن برای تغییر دادههای ارائهدهنده محتوا را به دست آورد.همچنین به ویژگیهای
permissionوreadPermissionمراجعه کنید.
-
- معرفی شده در:
- API سطح ۱
- همچنین ببینید:
- ارائه دهندگان محتوا
<ارائه دهنده>
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2026-07-02 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2026-07-02 بهوقت ساعت هماهنگ جهانی."],[],[]]