<provider>

תחביר:
<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: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> בקובץ המניפסט. אחרת, המערכת לא מודעת להן ולא מפעילה אותן.

צריך להצהיר רק על ספקי תוכן שהם חלק מהאפליקציה. אל תצהירו על ספקי תוכן באפליקציות אחרות שבהן אתם משתמשים באפליקציה שלכם.

מערכת Android מאחסנת הפניות לספקי תוכן לפי מחרוזת authority, שהיא חלק ממזהה ה-URI של התוכן של הספק. לדוגמה, נניח שאתם רוצים לגשת לספק תוכן שמאחסן מידע על אנשי מקצוע בתחום שירותי הבריאות. כדי לעשות את זה, מפעילים את ה-method ContentResolver.query(), שמקבלת URI שמזהה את הפלאגין שמתממשק עם שירותים חיצוניים, בין ארגומנטים אחרים:

content://com.example.project.healthcareprovider/nurses/rn

content: הסכימה מזהה את ה-URI כ-URI של תוכן שמפנה אל ספק תוכן של Android. הסמכות com.example.project.healthcareprovider מזהה את הספק עצמו. מערכת Android מחפשת את הרשות ברשימת הספקים המוכרים והרשויות שלהם. מחרוזת המשנה nurses/rn היא נתיב שספק התוכן משתמש בו כדי לזהות קבוצות משנה של נתוני הספק.

כשמגדירים את הפלאגין שמתממשק עם שירותים חיצוניים ברכיב <provider>, לא כוללים את ה-Scheme או את הנתיב בארגומנט android:name, אלא רק את הרשות.

מידע על שימוש בספקי תוכן ופיתוח שלהם זמין במאמר בנושא ספקי תוכן.

מאפיינים:
android:authorities
רשימה של רשויות URI אחת או יותר שמזהות נתונים שספק התוכן מציע. כדי לציין כמה רשויות, מפרידים בין השמות שלהן באמצעות נקודה-פסיק. כדי להימנע מהתנגשויות, כדאי להשתמש במוסכמת מתן שמות בסגנון Java לשמות של רשויות, כמו com.example.provider.cartoonprovider. בדרך כלל זה השם של מחלקת המשנה ContentProvider שמטמיעה את הספק

אין ברירת מחדל. צריך לציין לפחות רשות אחת.

android:enabled
האם המערכת יכולה ליצור מופע של ספק התוכן. הערך הוא "true" אם אפשר, ו-"false" אם אי אפשר. ערך ברירת המחדל הוא "true".

לאלמנט <application> יש מאפיין enabled משלו שחל על כל רכיבי האפליקציה, כולל ספקי תוכן. כדי שספק התוכן יופעל, הערכים של המאפיינים <application> ו-<provider> צריכים להיות "true", כמו שהם כברירת מחדל. אם אחד מהם הוא "false", הספק מושבת. אי אפשר ליצור ממנו מופע.

android:directBootAware

האם ספק התוכן תומך בהפעלה ישירה – כלומר, האם הוא יכול לפעול לפני שהמשתמש פותח את נעילת המכשיר.

הערה: במהלך הפעלה ישירה, ספק תוכן באפליקציה יכול לגשת רק לנתונים שמאוחסנים באחסון מוגן במכשיר.

ערך ברירת המחדל הוא "false".

android:exported
האם ספק התוכן זמין לשימוש באפליקציות אחרות.
  • "true": הספק זמין לאפליקציות אחרות. כל אפליקציה יכולה להשתמש ב-URI של התוכן של הספק כדי לגשת אליו, בכפוף להרשאות שצוינו עבור הספק.
  • "false": הספק לא זמין לאפליקציות אחרות. מגדירים את android:exported="false" כדי להגביל את הגישה לספק לאפליקציות שלכם. רק לאפליקציות שיש להן מזהה משתמש (UID) זהה לזה של הספק, או לאפליקציות שקיבלו גישה זמנית לספק דרך רכיב android:grantUriPermissions, יש גישה אליו.

המאפיין הזה הוצג ברמת API 17, ולכן כל המכשירים עם API ברמה 16 ומטה מתנהגים כאילו המאפיין הזה מוגדר כ-"true". אם מגדירים את android:targetSdkVersion לערך 17 ומעלה, ערך ברירת המחדל הוא "false" למכשירים עם API ברמה 17 ומעלה.

אתם יכולים להגדיר את 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>, מתבצעת קריאה ל-Context.revokeUriPermission() כשמזהה URI שכלול בכיסוי נמחק מהספק.

אפשר לעיין גם ברכיב <grant-uri-permission>.

android:icon
סמל שמייצג את ספק התוכן. המאפיין הזה מוגדר כהפניה למשאב של ציור שמכיל את הגדרת התמונה. אם לא מוגדר סמל, המערכת משתמשת בסמל שצוין לאפליקציה כולה. מידע נוסף זמין במאמר בנושא מאפיין icon של רכיב icon.<application>
android:initOrder
הסדר שבו ספק התוכן מופעל, ביחס לספקי תוכן אחרים שמארחים את אותו תהליך. אם יש תלות בין ספקי התוכן, הגדרת המאפיין הזה לכל אחד מהם מבטיחה שהם ייצרו בסדר שנדרש על ידי התלות הזו. הערך הוא מספר שלם, כאשר המספרים הגבוהים יותר מאותחלים קודם.
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‏ 1
ראו גם:
ספקי תוכן