הגדרת שיתוף קבצים

כדי להציע באופן מאובטח קובץ מהאפליקציה לאפליקציה אחרת, צריך להגדיר את האפליקציה כך שתציע אותה נקודת אחיזה מאובטחת לקובץ, בצורת 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

מידע נוסף בנושא זמין במאמרים הבאים: