PracticU

Location Settings Dialog

בלי כתוביותעם כתוביות
PracticU › קורס פיתוח אפליקציות - לאנדרואיד - Android - ב-JAVA › Location Settings Dialog
Location Settings Dialog
Location Settings Dialog מציג איך בודקים שהגדרות המיקום של המכשיר מתאימות לאפליקציה, ואם לא, מציגים למשתמש דיאלוג שמבקש לשנות אותן. כך האפליקציה מקבלת את ההגדרות שהיא צריכה בלי שהמשתמש ייאלץ לחפש אותן בעצמו.
השלבים העיקריים
1. הבעיה: ה-Fused Provider לא יכול לקבל מיקום אם הגדרות המכשיר לא מספקות, למשל כשהמיקום כבוי או כשהוא מוגדר ל-Device only. במקרה כזה האפליקציה מבקשת אישור לשנות את ההגדרות.
2. בניית הבקשה: יוצרים אובייקט LocationSettingsRequest.Builder, מוסיפים לו את LocationRequest, ובונים ממנו את הבקשה.
3. בדיקה: קוראים ל-checkLocationSettings עם ה-GoogleApiClient והבקשה, ומאזינים לתוצאה דרך ResultCallback.
4. סטטוס SUCCESS: ההגדרות מספקות, ומתחילים לבקש עדכוני מיקום.
5. סטטוס RESOLUTION_REQUIRED: מפעילים startResolutionForResult עם קוד בקשה. המערכת מציגה דיאלוג, והתשובה מגיעה ל-onActivityResult.
6. תשובה מהמשתמש: אם המשתמש אישר, מתחילים לקבל מיקום. אם לא, מוצגת הודעה שהמיקום לא זמין.
7. בדיקה במכשיר: כשהמיקום כבוי בהגדרות, הדיאלוג מופיע ומבקש להדליק GPS ורשת. לאחר האישור האפליקציה מקבלת את המיקום.
שימו לב
המרצה מזהיר שהפעלת startResolutionForResult צריכה להיות עטופה ב-try-catch, כי היא עלולה להיכשל.
בסיום ההרצאה הסטודנט יודע לבדוק הגדרות מיקום לפני בקשת עדכונים, ולהציג למשתמש דיאלוג לשינוי ההגדרות.
השיעור הבא בקורס: Google API - Static Map

פרקי ההרצאה: Location Settings Dialog

  1. 00:00

    מצב שבו הגדרות המיקום אינן מספקות

  2. 00:41

    בניית אובייקט Location Settings Request

  3. 02:25

    בדיקת הגדרות המיקום עם Settings API

  4. 03:28

    מימוש Result Callback ב-MainActivity

  5. 04:28

    קריאת סטטוס הגדרות המיקום

  6. 05:27

    טיפול במצב Resolution Required

  7. 06:08

    הצגת דיאלוג ההגדרות למשתמש

  8. 08:11

    טיפול בתשובה ובמקרה ברירת המחדל

תמלול ההרצאה: Location Settings Dialog

הטקסט המלא של הדקות הראשונות בהרצאה «Location Settings Dialog» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    בסרטון הקודם הצלחנו להשיג את מיקום המשתמש על ידי שימוש ב-Fused Provider. אבל מה קורה אם ההגדרות של הלוקיישן בתוך המכשיר הן לא מספקות? לדוגמה אם מוגדר במכשיר Device Only וה-Fused Provider צריך גם את ה-Network.

  2. 00:20

    לדוגמה אם בכלל הלוקיישן מוגדר כ-off אנחנו כביכול לא יכולים בכלל לקבל לוקיישן. אז במידה וזה קורה יש לנו אפשרות להציג למשתמש דיאלוג מיוחדת שמבקשת ממנו אישור לסדר את ההגדרות לוקיישן אוטומטית במכשיר שלו.

  3. 00:41

    זאת אומרת שהאפליקציה שלנו תציג לו את הדיאלוג אם הוא מאשר אז ההגדרות של הלוקיישן הפנימיות במכשיר שלו יהיו בדיוק כמו שאנחנו צריכים.

  4. 00:52

    אז בואו נראה איך עושים את זה. הדבר הראשון שאנחנו צריכים להוסיף זה איזשהו אובייקט שנקרא Location Settings Request. בעזרת האובייקט הזה אנחנו מבקשים או מציגים את הדיאלוג ומבקשים מהמשתמש לשנות את הגדרות הלוקיישן אצלו במכשיר.

  5. 01:15

    בואו נקריאייט, אנחנו רוצים לבנות אובייקט מה-Location Settings Request. אז בואו ניגש ונבצע שווה new, location settings request, נקודה בילדר.

  6. 01:31

    דרך הבילדר אנחנו מבצעים את הבנייה שלו, דרך פונקציה שנקראת addLocationRequest, נקרא לה ונשלח לה את ה-location request שכבר הגדרנו מקודם ושמתאר בדיוק מה אנחנו רוצים דרך הפרוביידר. מה אנחנו רוצים מהפרוביידר?

  7. 01:54

    כאן הגדרנו שאנחנו רוצים i-accuracy לדוגמה. אז בואו נבצע build בצורה כזאת. הדבר הבא שאנחנו צריכים לעשות זה לגשת ל-registered-location-updates. מה שעשינו ב-registered-location-updates כמובן אחרי שהיוזר לחץ על הלחצן וקיבל את הפרמישן הדרוש, זה פשוט מאוד התחלנו או ביקשנו את העדכונים לגבי המיקום של המשתמש,

  8. 02:25

    והיה בהנחה שההגדרות של הלוקיישן שלו הן בסדר במכשיר. אנחנו לא יכולים לקרוא לפונקציה הזאת כאן כי אנחנו לא בטוחים שההגדרות שלו הן בסדר ואנחנו רוצים לבצע בדיקה קודם כל האם ההגדרות שלו הן בסדר בתוך המכשיר.

  9. 02:45

    זה מתבצע על ידי services.settingsapi.checklocationsettings כאן אנחנו שולחים את google api client ואת הlocation settings request אנחנו מבצעים set result callback ואומרים שאנחנו מממשים את האינטרפייס הדרוש בכדי לקבל את העדכון לגבי הלוקיישן של המשתמש במכשיר, כלומר מה בעצם קורה עם הגדרות הלוקיישן שלו, האם הן מספקות או האם

  10. 03:31

    הן לא מספקות. אז בואו נבצע עכשיו Alt Enter, Make Main Activity Implement ויש לנו פה Result Callback, נבצע אוקיי ואנחנו רואים שיש לנו פונקציה אחת שנקראת OnResult והפונקציה הזאת מגיעה מאינטרפייס שכתוב כאן, והאינטרפייס הזה זה Result Callback של Location Settings Result.

  11. 04:01

    מה אנחנו עושים בפונקציה הזאת OnResult? הפונקציה הזאת בעצם מחזירה לנו תשובה האם הגדרות הלוקיישן מספקות כן או לא. התשובה שמוחזרת נמצאת בתוך משתנה מסוג סטטוס.

  12. 04:17

    אז בואו נבנה פה סטטוס שווה, ויש לנו פה את הפרמטר שהתקבל לפונקציה שנקרא Location Settings Result. ניקח GetStatus. כעת אנחנו יכולים לבצע בדיקה עם סוויץ', פשוט מי זה הסטטוס שלנו?

  13. 04:36

    GetStatusCode. יש לנו פה מספר קייסים. במידה וה-LocationSettingsStatusCode.success זאת אומרת, אין לנו שום בעיה עם ההגדרות של הלוקיישן במכשיר של היוזר, כאן אנחנו כבר יכולים לבקש רישום לקבלת המיקום של המשתמש.

  14. 05:05

    זאת אומרת שנעתיק את הפונקציה הזאת וכבר אנחנו יכולים להדביק אותה פה בקייס הזה. נבצע הדבקה וכמובן נגדיר כאן ברייק. בואו נעתיק רק את הדירקטיב הזאת למעשה אנחנו יכולים אפילו לגזור אותה ולהדביק אותה פה בצורה כזאת ואז לא תהיה לנו בעיה עם ה-permission.

  15. 05:35

    אז אנחנו נכנסים לקייס הזה אם ההגדרות מספקות. אם ההגדרות לא מספקות אנחנו רוצים קייס נוסף בואו נעתיק נדביק והקייס הנוסף שאנחנו רוצים זה resolution required כלומר דרוש פתרון כי ההגדרות לא מספקות.

  16. 05:58

    במצב הזה אנחנו לא יכולים להירשם ללוקיישן אפדייטס אלא אנחנו צריכים להציג את הדיאלוג. את הדיאלוג אנחנו מציגים על ידי סטטוס סטארט רזולושן פור ריזולט שולחים את עצמנו ואיזשהו ריקווסט קוד למעשה מה שקורה בפקודה הזאת זה המערכת מציגה דיאלוג ואנחנו מקבלים את התשובה על ידי אינטנט כלומר המערכת שולחת אימפליסיט אינטנט

  17. 06:28

    והתשובה שמוחזרת אנחנו צריכים לתפוס אותה כאילו שאנחנו הפעלנו Implicit Intent ואנחנו מקבלים את התשובה ב-On Activity Result.

  18. 06:38

    אז קודם כל אנחנו צריכים לספק פה Request Code אז בואו ניגש פה למעלה נשכפל את ה-Request Code הזה ונקרא לו Request Code Settings נגדיר כאן 2 ניקח את ה-Request Code Settings ונשלח אותו פה בצורה כזאת והמערכת אומרת לנו שבשביל לקרוא

  19. 07:03

    לפקודה הזאת אנחנו צריכים לעטוף את זה ב-try catch אז בואו נגיד לו can surround with try catch ובתוך ה-catch בואו פשוט נציג איזושהי הודעה יש לנו כאן toast make text ונציג לו את ההודעה failed to start דיאלוג נשרשר את e-get message ונשים לו פה איזה length long כזה show נשנה את זה ל-ex נהיה עקביים עם פרויקטים קודמים שביצענו ויש

  20. 07:54

    לנו עכשיו את הבקשה של הדיאלוג כלומר הפקודה הזאת אמורה להציג דיאלוג ליוזר אם היא לא מצליחה להציג דיאלוג אז כמובן אנחנו מציגים איזושהי הודעת פיילינג כזאת ואנחנו יכולים בתשובה שאנחנו מקבלים מהדיאלוג לדעת האם היוזר מסכים לנו ומאשר שינוי של הגדרות הלוקיישן אצלו במכשיר או לא מסכים.

  21. 08:20

    אבל לפני שנעבור לתשובה של הדיאלוג יש לנו עוד קייס אחד שאנחנו צריכים לכתוב וזה מה קורה אם זה לא הראשון ולא השני ובואו נגדיר פה שזה פשוט דיפולט. אם זה דיפולט, גם כאן אנחנו לא יכולים לבקש את העדכונים של הלוקיישן אלא נציג לו איזשהו טוסט דומה.

  22. 08:45

    נעתיק את הטוסט הזה ופשוט נדביק אותו פה ונגדיר לו fail to start location setting dialog אין לנו מעבר לזה error message שאנחנו יכולים להציג אז פשוט נסתפק בזה יופי אז יש לנו כאן את ה-on result שזה בעצם תשובה לגבי מה הסטטוס של הגדרות הלוקיישן במכשיר של המשתמש.

  23. 09:10

    האם הן מספקות או האם הן לא מספקות? אם הן לא מספקות, אנחנו רוצים להציג דיאלוג.

לקורס המלא: קורס פיתוח אפליקציות לאנדרואיד

ההרצאה הקודמת: Fused Provider

ההרצאה הבאה: Google API - Static Map

הרצאות קשורות מקורסים אחרים

  • הוספת אנימציה ל-Dialog
  • אובייקט Location (שורת URL)
  • תיבות דו-שיח - Build-In Dialog Boxes

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס פיתוח אפליקציות - לאייפון iPhone iOS - ב-Swift-Xcode
  • קורס פלאטר - Flutter - שפת DART של גוגל למובייל - פיתוח אפליקציות לאנדרואיד ואייפון
  • קורס PhoneGap - פיתוח אפליקציות לאנדרואיד ואייפון