- תחביר:
-
<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>
- תיאור:
-
מצהיר על רכיב של ספק תוכן. ספק תוכן הוא תת-מחלקה של
ContentProvider
שמספקת גישה מובנית לנתונים שמנוהלים על ידי תרגום מכונה. כל ספקי התוכן באפליקציה חייבים להיות מוגדרים רכיב<provider>
בקובץ המניפסט. אחרת, המערכת לא מודעת אליהם ולא מפעיל אותם.להצהיר (declare) על ספקי תוכן רק שהם חלק מהאפליקציה שלך. לא להצהיר על ספקי תוכן ב: יישומים אחרים שבהם אתם משתמשים באפליקציה.
מערכת Android שומרת הפניות לספקי תוכן בהתאם לרשות מסוימת. , חלק מ-URI של התוכן של הספק. לדוגמה, נניח שאתם רוצים גישה לספק תוכן שמאחסן מידע על אנשי מקצוע בתחום הבריאות. לבצע קוראים לשיטה
ContentResolver.query()
, שלוקחת URI שמזהה את הספק, בין שאר הארגומנטים:content://com.example.project.healthcareprovider/nurses/rn
הסכימה
content:
מזהה את ה-URI כ-URI של תוכן שמפנה אל ספק תוכן של Android. הרשותcom.example.project.healthcareprovider
מזהה את הספק עצמו. מערכת Android מחפשת את הרשות ברשימת הספקים המוכרים שלה ואת הרשויות שלהם. מחרוזת המשנהnurses/rn
היא נתיב, וספק התוכן משתמש בו. כדי לזהות קבוצות משנה של נתוני הספק.כשמגדירים את הספק ברכיב
<provider>
, לא כוללים את הסכמה או את הנתיב בארגומנטandroid:name
, אלא רק בלתי הוגנת.למידע על השימוש בספקי תוכן ועל פיתוחם, ראו ספקי תוכן.
- :
-
android:authorities
-
רשימה של רשות URI אחת או יותר שמזהות נתונים שספק התוכן מציע.
ציינו כמה רשויות. יש להפריד בין השמות באמצעות נקודה ופסיק.
כדי למנוע התנגשויות, כדאי להשתמש במוסכמה למתן שמות בסגנון Java לשמות רשויות,
כמו
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 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
- סמל שמייצג את ספק התוכן.
מאפיין זה מוגדר כהפניה למשאב ניתן להזזה שמכיל
את הגדרת התמונה. אם היא לא מוגדרת, הסמל שצוין עבור האפליקציה
משמש במקום זאת, מידע נוסף זמין ב
<application>
המאפייןicon
של הרכיב. android:initOrder
- הסדר שבו נוצר המופע של ספק התוכן, יחסית לספקי תוכן אחרים שמתארחים באותו תהליך. כאשר יש יחסי תלות בין ספקי התוכן, ההגדרה הזו עבור כל אחד מהם, מוודאים שהם נוצרו לפי הסדר שנדרשת על ידי יחסי התלות האלה. הערך הוא מספר שלם, עם אתחול של מספרים גבוהים יותר.
android:label
- תווית קריאה למשתמש עבור התוכן שסופק.
אם המאפיין הזה לא מוגדר, התווית שהוגדרה עבור האפליקציה בכללותה
נעשה בו שימוש. למידע נוסף, אפשר לעיין ברכיב
<application>
label
.התווית מוגדרת בדרך כלל כהפניה למשאב מחרוזת, כך אפשר להתאים אותו לשוק המקומי כמו מחרוזות אחרות בממשק המשתמש. עם זאת, לנוחיותכם במהלך הפיתוח של האפליקציה, אפשר להגדיר אותו גם כמחרוזת גולמית.
android:multiprocess
- אם האפליקציה פועלת בכמה תהליכים, המאפיין הזה קובע אם
נוצרים כמה מופעים של ספק התוכן. אם
"true"
, לכל אחד מהתהליכים של האפליקציה יש אובייקט של ספק תוכן משלו. אם המיקום"false"
, התהליכים של האפליקציה משתפים רק אובייקט אחד של ספק תוכן. ערך ברירת המחדל הוא"false"
.הגדרת הסימון הזה ל-
"true"
יכולה לשפר את הביצועים על ידי הפחתת התקורה של התקשורת בין תהליכים, אבל היא גם מגדילה את הזיכרון טביעת הרגל הפחמנית של כל תהליך. android:name
- שם המחלקה שמממשת את ספק התוכן, תת-מחלקה של
ContentProvider
. בדרך כלל מדובר ברמת הרשאה מלאה שם הכיתה, למשל"com.example.project.TransportationProvider"
. עם זאת, כקיצור, אם התו הראשון של השם הוא נקודה, הוא מצורף לשם החבילה שצוין רכיב<manifest>
.אין ברירת מחדל. צריך לציין את השם.
android:permission
- שם ההרשאה שהלקוחות חייבים כדי לקרוא או לכתוב את
של ספק התוכן. המאפיין הזה הוא דרך נוחה להגדיר
הרשאה יחידה גם לקריאה וגם לכתיבה. אבל,
readPermission
, המאפייניםwritePermission
ו-grantUriPermissions
מקבלים עדיפות בסרטון הזה.אם
readPermission
מוגדר גם הוא, הוא שולט בגישה לשליחת שאילתות לספק התוכן. אם המאפייןwritePermission
מוגדר, הוא שולט בגישה לשינוי נתוני הספק.למידע נוסף על הרשאות עיינו במאמר הרשאות בסקירה הכללית של קובץ המניפסט של האפליקציה. טיפים בנושא אבטחה.
android:process
- שם התהליך שבו ספק התוכן פועל. בדרך כלל,
כל הרכיבים של אפליקציה שפועלים בתהליך ברירת המחדל שנוצר עבור
תרגום מכונה. יש לה שם זהה לחבילת האפליקציה.
של רכיב
<application>
process
יכול להגדיר ברירת מחדל לכל הרכיבים. אבל כל רכיב יכול לשנות את ברירת המחדל עם מאפיין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
- למידע נוסף:
- ספקי תוכן
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2024-08-22 (שעון UTC).
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"חסרים לי מידע או פרטים"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"התוכן מורכב מדי או עם יותר מדי שלבים"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"התוכן לא עדכני"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"בעיה בתרגום"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"בעיה בדוגמאות/בקוד"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"סיבה אחרת"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"התוכן קל להבנה"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"התוכן עזר לי לפתור בעיה"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"סיבה אחרת"
}]
{
"lastModified": "עדכון אחרון: 2024-08-22 (שעון UTC).",
"confidential": False
}