
getFilesDir משתמשים בפונקציה שמחזירה נתיב חיצוני, למשל Environment.getExternalStorageDirectory() (או getExternalStoragePublicDirectory), עם getAbsolutePath ושם הקובץ.isExternalStorageMounted שקוראת ל-Environment.getExternalStorageState() ומחזירה false אם המצב אינו Environment.MEDIA_MOUNTED. בתחילת הכתיבה ובתחילת הקריאה בודקים אותה. אם האחסון חסר, מציגים Toast ("external storage is missing or not supported") ויוצאים מהפונקציה. כך מתגוננים למצב שבו המשתמש שלף את ה-SD Card.uses-permission ל-READ_EXTERNAL_STORAGE ול-WRITE_EXTERNAL_STORAGE, לפי הצורך: קריאה בלבד, כתיבה בלבד או שתיהן.MyFile (52 בתים) תחת Miscellaneous. אפשר למחוק אותו משם אבל לא לצפות בו. תיקיות כמו Pictures, Music או Podcasts היו מתקבלות לו נשמר בהן.הטקסט המלא של הדקות הראשונות בהרצאה «External Storage» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו איך אנחנו יכולים ליצור קובץ, לכתוב אליו ולקרוא ממנו, בואו נראה איך אנחנו יכולים לעשות בדיוק את זה אבל באקסטרנל סטורג'. הדבר הראשון שאנחנו צריכים לעשות זה לא להביא את הנתיב לאינטרנל סטורג' אלא לגשת לאותה פונקציה שראינו שמביאה לנו את הנתיב לאקסטרנל סטורג'.
הפונקציה הייתה לדוגמה environment.get external storage public directory, או בואו ניקח אפילו את get external storage directory כדי להיות יותר סימפל ולקרוא פשוט ל-get absolute path עם הקובץ.
הדבר הבא שאנחנו צריכים לעשות זה פונקציה שבודקת האם הזיכרון הזה קיים. בואו נבנה אותה פה. private boolean is external storage mounted.
אקסטרנל סטורג' זאת מילה באנגלית שמתארת שמשהו קיים ויש עבורו תמיכה והוא עובד בצורה תקינה. בתוך הפונקציה אנחנו רוצים לפתוח איזושהי מחרובת שנקראת external storage state ולקבל את environment.get external storage state.
זה המצב של האקסטרנל סטורג'. הדבר הבא שאנחנו רוצים לעשות זה לבדוק האם הוא לא בסדר. אם not external storage state נקודה equals ל environment.media.mounted אנחנו מחזירים false.
אחרת בואו נחזיר true. עכשיו יש לנו פה פונקציה שבודקת את המצב של ה external storage של אותו זיכרון. לפני שאנחנו מבצעים כתיבה או קריאה מה שכדאי לנו לעשות זה פשוט לבדוק על ידי הפונקציה הזאת את המצב של האקסטרנל סטורג'.
אם Not is external storage mounted האם האקסטרנל סטורג' לא קיים, לא נתמך, לא מוכן לשימוש? בואו נציג איזה טוסט, נכתוב בו external storage is missing or not supported ופשוט נצא מהפונקציה ולא נבצע דבר.
בואו ניקח בדיוק את זה. נדביק גם בפונקציה של הקריאה וכעת אנחנו בעצם מגינים על עצמנו ממצב שבו ה-External Storage לא קיים, היוזר אולי שלף את ה-SD Card מהמכשיר והוא לא קיים וכדומה.
הדבר הבא שאנחנו צריכים לעשות זה לתת הרשאה. אנחנו הולכים ל-Manifest ונותנים כאן הרשאת כתיבה ו/או הרשאת קריאה. Uses Permission External Storage כאשר אנחנו יכולים to read it ובואו ניתן עוד אחד Uses Permission External Storage to write write external storage אז אם אנחנו רוצים רק לקרוא אנחנו יכולים רק read אם אנחנו רוצים רק לכתוב אנחנו יכולים רק write אם
אנחנו רוצים את שניהם אבל אנחנו חייבים את שניהם וזה בעצם מציין מבחינת אנדרואיד להרשאות של האפליקציה שאנחנו רוצים לקרוא ולכתוב לאקסטרנל סטורג'.
מכאן, כל הדוגמה הזאת זהה לדוגמה הקודמת שבה ביצענו כתיבה לקובץ וקריאה מקובץ. פשוט בגלל שהנתיב כרגע מצביע על אקסטרנל סטורג', אז הכתיבה והקריאה יהיו לאקסטרנל סטורג', לאותו זיכרון שהוא נגיש על ידי כל האפליקציות, שהוא נשמר במכשיר אחרי שאנחנו מסירים את האפליקציה והוא לא מוסר ביחד עם האפליקציה.
אז אנחנו רוצים לבדוק את זה, ולמעשה באמולטור אין external storage, אין sd card, לפחות באמולטור הזה. אז בואו נבדוק את זה על המכשיר האמיתי, ונבצע writing, אנחנו רואים שזה done, ונבצע reading, ואנחנו רואים שהוא הצליח לקרוא, והשאלה היא איפה הדבר הזה נשמר.
אז בואו ניגש ואפילו נסגור את האפליקציה וניגש ל-Settings של המכשיר. ב-Settings אנחנו יכולים לגשת ל-Storage וב-Storage אנחנו יכולים לראות שיש לנו פה כל מיני תיקיות, לדוגמה אם היינו שומרים את המידע בתיקיית Pictures אז זה היה נשמר כאן, אם היינו שומרים את זה
ב-Ringtone או ב-Podcast