כדי להציע באופן מאובטח קובץ מהאפליקציה לאפליקציה אחרת, צריך להגדיר את האפליקציה כך שתציע אותה
נקודת אחיזה מאובטחת לקובץ, בצורת URI של תוכן. מכשיר Android
הרכיב FileProvider
יוצר מזהי URI של תוכן עבור
לפי המפרטים שסיפקתם ב-XML. בשיעור הזה נסביר איך להוסיף את ברירת המחדל
הטמעת FileProvider
באפליקציה שלך, ואיך
להגדיר את הקבצים שרוצים להציע לאפליקציות אחרות.
הערה: הכיתה FileProvider
היא חלק
ספריית הליבה של AndroidX. למידע
על הכללת הספרייה הזו באפליקציה שלכם:
הצהרה על יחסי תלות.
ציון ה-FileProvider
כדי להגדיר FileProvider
לאפליקציה, צריך להזין
את המניפסט. הערך הזה מציין את הסמכות שיש להשתמש בה ביצירת מזהי URI של תוכן, וכן
השם של קובץ XML שמציין את הספריות שהאפליקציה יכולה לשתף.
קטע הקוד הבא מראה איך להוסיף למניפסט את
רכיב <provider>
שמציין את
FileProvider
, הרשות ו
שם קובץ ה-XML:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application ...> <provider android:name="androidx.core.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... </application> </manifest>
בדוגמה זו, המאפיין android:authorities
מציין את רשות ה-URI
שרוצים להשתמש בהן למזהי URI של תוכן שנוצרו על ידי
FileProvider
.
בדוגמה, הרשות היא com.example.myapp.fileprovider
. לשימוש אישי
לציין את הרשות שכוללת את
הערך android:package
עם המחרוזת 'fileprovider' שצורפו אליה. מידע נוסף
על ערך הרשות, קראו את הנושא
מזהי URI של תוכן והתיעוד עבור
מאפיין android:authorities
.
רכיב הצאצא <meta-data>
של
<provider>
מפנה לקובץ XML שמציין את הספריות שרוצים
לשתף. המאפיין android:resource
הוא הנתיב והשם של הקובץ, בלי
התוסף .xml
.התוכן של הקובץ הזה מתואר בקטע הבא.
ציון ספריות שניתנות לשיתוף
אחרי שמוסיפים את FileProvider
לקובץ המניפסט של האפליקציה,
צריך לציין את הספריות שמכילות את הקבצים שרוצים לשתף. כדי לציין את
אחר כך צריך להתחיל ביצירת הקובץ filepaths.xml
דרך res/xml/
בספריית המשנה של הפרויקט. בקובץ הזה, מציינים את הספריות על ידי הוספת רכיב XML עבור
בכל ספרייה. בקטע הקוד הבא מוצגת דוגמה לתוכן של
res/xml/filepaths.xml
קטע הקוד גם מדגים איך לשתף ספריית משנה
של הספרייה files/
באזור האחסון הפנימי:
<paths> <files-path path="images/" name="myimages" /> </paths>
בדוגמה הזו, התג <files-path>
משתף ספריות בתוך
ספרייה אחת (files/
) באחסון הפנימי של האפליקציה. המאפיין path
משתף את ספריית המשנה images/
של files/
. name
המאפיין מורה ל-FileProvider
להוסיף את קטע הנתיב
myimages
למזהי URI של תוכן עבור קבצים בספריית המשנה files/images/
.
לרכיב <paths>
יכולים להיות כמה צאצאים, ולכל אחד מהם מצוין
ספרייה לשיתוף. נוסף לרכיב <files-path>
, ניתן לבצע את הפעולות הבאות:
להשתמש ברכיב <external-path>
כדי לשתף ספריות באחסון חיצוני,
את הרכיב <cache-path>
כדי לשתף ספריות במטמון הפנימי
למידע נוסף על רכיבי הצאצא המציינים ספריות משותפות, אפשר לעיין ב
מאמרי עזרה של FileProvider
.
הערה: באמצעות קובץ ה-XML תוכלו לציין את הספריות רק באמצעות קובץ ה-XML. לשתף; לא ניתן להוסיף ספרייה באופן פרוגרמטי.
עכשיו יש לך מפרט מלא של FileProvider
שיוצרת מזהי URI של תוכן עבור קבצים בספרייה files/
של האפליקציה
באחסון הפנימי או לקבצים בספריות המשנה של files/
. מתי האפליקציה יוצרת
URI של תוכן לקובץ, הוא מכיל את הרשות שצוינה
רכיב <provider>
(com.example.myapp.fileprovider
),
הנתיב myimages/
ושם הקובץ.
לדוגמה, אם מגדירים FileProvider
לפי
וקטעי מידע בשיעור הזה, ואתם מבקשים URI של תוכן עבור הקובץ
default_image.jpg
, FileProvider
מחזירה את הערך
ה-URI הבא:
content://com.example.myapp.fileprovider/myimages/default_image.jpg
מידע נוסף בנושא זמין במאמרים הבאים: