ב-Android 4.4 (רמת API 19) הוצגה Storage Access Framework (SAF). באמצעות SAF, המשתמשים יכולים לעיין במסמכים, בתמונות ובקבצים אחרים, ולפתוח אותם בכל ספקי האחסון המועדפים עליהם. ממשק משתמש סטנדרטי וקל לשימוש שמאפשר למשתמשים לעיין בקבצים ולגשת לקבצים האחרונים באופן עקבי בכל האפליקציות והספקים.
שירותי אחסון בענן או מקומיים יכולים להשתתף בסביבה העסקית הזו על ידי הטמעת DocumentsProvider
שמכיל את השירותים שלהם. אפליקציות לקוח שצריכות גישה למסמכים של ספק יכולות להשתלב עם SAF באמצעות כמה שורות קוד.
SAF כולל את הפריטים הבאים:
- ספק מסמכים: ספק תוכן שמאפשר לשירות אחסון, כמו Google Drive, לחשוף את הקבצים שהוא מנהל. ספק מסמכים מיושם כסוג משנה של הכיתה
DocumentsProvider
. הסכימה של ספק המסמכים מבוססת על היררכיית קבצים מסורתית, אבל האופן שבו ספק המסמכים שומר את הנתונים פיזית הוא באחריותכם. פלטפורמת Android כוללת כמה ספקי מסמכים מובנים, כמו 'הורדות', 'תמונות' ו'סרטונים'. - אפליקציית לקוח: אפליקציה בהתאמה אישית שמפעילה את פעולות הכוונה
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
ו-ACTION_OPEN_DOCUMENT_TREE
ומקבלת את הקבצים שמוחזרים על ידי ספקי המסמכים. - בורר: ממשק משתמש מערכת שמאפשר למשתמשים לגשת למסמכים מכל ספקי המסמכים שעומדים בקריטריונים לחיפוש באפליקציית הלקוח.
SAF כולל את התכונות הבאות:
- מאפשרת למשתמשים לעיין בתוכן מכל ספקי המסמכים, ולא רק מאפליקציה אחת.
- מאפשר לאפליקציה שלכם לקבל גישה קבועה לטווח ארוך למסמכים שבבעלות ספק המסמכים. הגישה הזו מאפשרת למשתמשים להוסיף, לערוך, לשמור ולמחוק קבצים אצל הספק.
- תמיכה בכמה חשבונות משתמשים ובשורשים זמניים, כמו ספקי אחסון USB, שמופיעים רק אם הכונן מחובר.
סקירה כללית
ה-SAF מתמקד בספק תוכן שהוא תת-סוג של הכיתה DocumentsProvider
. בתוך ספק מסמכים, הנתונים מובְנים בתור היררכיית קבצים מסורתית:
איור 1. מודל הנתונים של ספק המסמכים. ה-root מפנה למסמך יחיד, שממנו מתחיל ההתפצלות של העץ.
חשוב לזכור:
- כל ספק מסמכים מדווח על שורש אחד או יותר, שהם נקודות התחלה לחקירה של עץ מסמכים.
לכל שורש יש
COLUMN_ROOT_ID
ייחודי, והוא מפנה למסמך (ספרייה) שמייצג את התוכן שמתחת לאותו שורש. השורשים הם דינמיים מטבעם כדי לתמוך בתרחישי שימוש כמו כמה חשבונות, מכשירי אחסון USB זמניים או כניסה של משתמשים ויציאה שלהם. - מתחת לכל עץ יש מסמך אחד. המסמך הזה מפנה למסמכים 1 עד N, שכל אחד מהם יכול להפנות למסמכים 1 עד N.
- כל קצה עורפי של אחסון מציג קבצים ודירקטורים נפרדים באמצעות הפניה אליהם באמצעות
COLUMN_DOCUMENT_ID
ייחודי. מזהי המסמכים הם ייחודיים ולא משתנים אחרי שהם מונפקים, כי הם משמשים להענקת הרשאות URI קבועות במהלך הפעלות מחדש של המכשיר. - מסמכים יכולים להיות קובץ שניתן לפתוח, עם סוג MIME ספציפי, או ספרייה שמכילה מסמכים נוספים, עם סוג ה-MIME
MIME_TYPE_DIR
. - לכל מסמך יכולות להיות יכולות שונות, כפי שמתואר ב-
COLUMN_FLAGS
. לדוגמה,FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
ו-FLAG_SUPPORTS_THUMBNAIL
. אפשר לכלול את אותוCOLUMN_DOCUMENT_ID
בכמה ספריות.
בקרת זרימה
מודל הנתונים של ספק המסמכים מבוסס על היררכיית קבצים מסורתית. עם זאת, אתם יכולים לאחסן את הנתונים פיזית בכל דרך שתרצו, כל עוד תוכלו לגשת אליהם באמצעות ה-API של DocumentsProvider
. לדוגמה, אתם יכולים להשתמש באחסון בענן שמבוסס על תגים לנתונים שלכם.
באיור 2 מוצג איך אפליקציית תמונות עשויה להשתמש ב-SAF כדי לגשת לנתונים השמורים:
איור 2. התהליך של Storage Access Framework.
חשוב לזכור:
- בסביבת SAF, הספקים והלקוחות לא מתקשרים ישירות. לקוח מבקש הרשאה לבצע פעולות בקובצים, כלומר לקרוא, לערוך, ליצור או למחוק אותם.
- האינטראקציה מתחילה כשאפליקציה, בדוגמה הזו אפליקציית תמונות, מפעילה את הכוונה
ACTION_OPEN_DOCUMENT
אוACTION_CREATE_DOCUMENT
. הכוונה יכולה לכלול מסננים כדי לחדד את הקריטריונים, למשל "הצגת כל הקבצים שניתן לפתוח עם סוג ה-MIME 'image'". - אחרי שהכוונה מופעלת, הבורר של המערכת עובר לכל ספק רשום ומציג למשתמש את שורשי התוכן התואמים.
- הבורר מספק למשתמשים ממשק סטנדרטי לגישה למסמכים, גם אם ספקי המסמכים הבסיסיים שונים מאוד. לדוגמה, באיור 2 מוצגים ספק של Google Drive, ספק USB וספק ענן.
באיור 3, המשתמש בוחר את תיקיית ההורדות מבורר שנפתח בחיפוש תמונות. בבורר מוצגים גם כל שורשי הנתונים שזמינים לאפליקציית הלקוח.
איור 3. בורר שבו תיקיית ההורדות נבחרה כמיקום חיפוש.
אחרי שהמשתמש בוחר בתיקיית ההורדות, התמונות מוצגות. תרשים 4 מציג את התוצאה של התהליך הזה. עכשיו המשתמש יכול לבצע פעולות עם התמונות בדרכים שבהן הספק ואפליקציית הלקוח תומכים.
איור 4. תמונות שמורות בתיקיית ההורדות, כפי שמוצגות בבורר המערכת.
כתיבת אפליקציית לקוח
ב-Android 4.3 וגרסאות ישנות יותר, אם רוצים שהאפליקציה תוכל לאחזר קובץ מאפליקציה אחרת, צריך להפעיל כוונה (intent) כמו ACTION_PICK
או ACTION_GET_CONTENT
. לאחר מכן המשתמש בוחר אפליקציה אחת כדי לבחור קובץ. האפליקציה שנבחרה חייבת לספק ממשק משתמש שמאפשר למשתמשים לעיין בקבצים הזמינים ולבחור מהם.
ב-Android 4.4 ואילך (רמת API 19 ואילך), יש לכם אפשרות נוספת להשתמש ב-intent ACTION_OPEN_DOCUMENT
, שמציג ממשק משתמש של בורר שמנוהל על ידי המערכת ומאפשר למשתמש לעיין בכל הקבצים שהאפליקציות האחרות הפכו לזמינים. ממשק המשתמש היחיד הזה מאפשר למשתמשים לבחור קובץ מכל אחת מהאפליקציות הנתמכות.
ב-Android 5.0 (רמת API 21) ואילך, אפשר גם להשתמש ב-intent ACTION_OPEN_DOCUMENT_TREE
, שמאפשר למשתמש לבחור ספרייה שאפליקציית לקוח תקבל גישה אליה.
הערה: האפשרות ACTION_OPEN_DOCUMENT
היא לא תחליף ל-ACTION_GET_CONTENT
.
האפשרות שבה תשתמשו תלויה בצרכים של האפליקציה:
- משתמשים ב-
ACTION_GET_CONTENT
אם רוצים שהאפליקציה תוכל לקרוא או לייבא נתונים. בגישה הזו, האפליקציה מייבאת עותק של הנתונים, למשל קובץ תמונה. - משתמשים ב-
ACTION_OPEN_DOCUMENT
אם רוצים לאפליקציה גישה מתמשכת לטווח ארוך למסמכים שבבעלות ספק מסמכים. דוגמה לכך היא אפליקציה לעריכת תמונות שמאפשרת למשתמשים לערוך תמונות שמאוחסנות אצל ספק מסמכים.
מידע נוסף על תמיכה בגלישה בקבצים ובספריות באמצעות ממשק המשתמש של בורר המערכת זמין במדריך בנושא גישה למסמכים ולקבצים אחרים.
מקורות מידע נוספים
מקורות מידע נוספים על ספקי מסמכים: