<ارائه دهنده>

نحو:
<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 سطح ۱
همچنین ببینید:
ارائه دهندگان محتوا