כדי להציע קובץ מהאפליקציה בצורה מאובטחת לאפליקציה אחרת, צריך להגדיר את האפליקציה כך שתציע
כינוי מאובטח לקובץ, בצורת URI של תוכן. הרכיב FileProvider
של Android יוצר מזהי URI של תוכן
לקבצים, בהתאם למפרט שסיפקתם ב-XML. בשיעור הזה נסביר איך להוסיף את הטמעת ברירת המחדל של FileProvider
לאפליקציה, ואיך
לציין את הקבצים שרוצים להציע לאפליקציות אחרות.
הערה: הכיתה FileProvider
היא חלק מAndroidX Core Library. למידע נוסף על הכללת הספרייה הזו באפליקציה, ראו הצהרת יחסי תלות.
ציון ה-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 הוא הדרך היחידה לציין את הספריות שרוצים לשתף. אי אפשר להוסיף ספרייה באופן פרוגרמטי.
עכשיו יש לכם מפרט מלא של 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
מידע נוסף בנושא זמין במאמרים הבאים: