
הטקסט המלא של הדקות הראשונות בהרצאה «Location Settings Dialog» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם הצלחנו להשיג את מיקום המשתמש על ידי שימוש ב-Fused Provider. אבל מה קורה אם ההגדרות של הלוקיישן בתוך המכשיר הן לא מספקות? לדוגמה אם מוגדר במכשיר Device Only וה-Fused Provider צריך גם את ה-Network.
לדוגמה אם בכלל הלוקיישן מוגדר כ-off אנחנו כביכול לא יכולים בכלל לקבל לוקיישן. אז במידה וזה קורה יש לנו אפשרות להציג למשתמש דיאלוג מיוחדת שמבקשת ממנו אישור לסדר את ההגדרות לוקיישן אוטומטית במכשיר שלו.
זאת אומרת שהאפליקציה שלנו תציג לו את הדיאלוג אם הוא מאשר אז ההגדרות של הלוקיישן הפנימיות במכשיר שלו יהיו בדיוק כמו שאנחנו צריכים.
אז בואו נראה איך עושים את זה. הדבר הראשון שאנחנו צריכים להוסיף זה איזשהו אובייקט שנקרא Location Settings Request. בעזרת האובייקט הזה אנחנו מבקשים או מציגים את הדיאלוג ומבקשים מהמשתמש לשנות את הגדרות הלוקיישן אצלו במכשיר.
בואו נקריאייט, אנחנו רוצים לבנות אובייקט מה-Location Settings Request. אז בואו ניגש ונבצע שווה new, location settings request, נקודה בילדר.
דרך הבילדר אנחנו מבצעים את הבנייה שלו, דרך פונקציה שנקראת addLocationRequest, נקרא לה ונשלח לה את ה-location request שכבר הגדרנו מקודם ושמתאר בדיוק מה אנחנו רוצים דרך הפרוביידר. מה אנחנו רוצים מהפרוביידר?
כאן הגדרנו שאנחנו רוצים i-accuracy לדוגמה. אז בואו נבצע build בצורה כזאת. הדבר הבא שאנחנו צריכים לעשות זה לגשת ל-registered-location-updates. מה שעשינו ב-registered-location-updates כמובן אחרי שהיוזר לחץ על הלחצן וקיבל את הפרמישן הדרוש, זה פשוט מאוד התחלנו או ביקשנו את העדכונים לגבי המיקום של המשתמש,
והיה בהנחה שההגדרות של הלוקיישן שלו הן בסדר במכשיר. אנחנו לא יכולים לקרוא לפונקציה הזאת כאן כי אנחנו לא בטוחים שההגדרות שלו הן בסדר ואנחנו רוצים לבצע בדיקה קודם כל האם ההגדרות שלו הן בסדר בתוך המכשיר.
זה מתבצע על ידי services.settingsapi.checklocationsettings כאן אנחנו שולחים את google api client ואת הlocation settings request אנחנו מבצעים set result callback ואומרים שאנחנו מממשים את האינטרפייס הדרוש בכדי לקבל את העדכון לגבי הלוקיישן של המשתמש במכשיר, כלומר מה בעצם קורה עם הגדרות הלוקיישן שלו, האם הן מספקות או האם
הן לא מספקות. אז בואו נבצע עכשיו Alt Enter, Make Main Activity Implement ויש לנו פה Result Callback, נבצע אוקיי ואנחנו רואים שיש לנו פונקציה אחת שנקראת OnResult והפונקציה הזאת מגיעה מאינטרפייס שכתוב כאן, והאינטרפייס הזה זה Result Callback של Location Settings Result.
מה אנחנו עושים בפונקציה הזאת OnResult? הפונקציה הזאת בעצם מחזירה לנו תשובה האם הגדרות הלוקיישן מספקות כן או לא. התשובה שמוחזרת נמצאת בתוך משתנה מסוג סטטוס.
אז בואו נבנה פה סטטוס שווה, ויש לנו פה את הפרמטר שהתקבל לפונקציה שנקרא Location Settings Result. ניקח GetStatus. כעת אנחנו יכולים לבצע בדיקה עם סוויץ', פשוט מי זה הסטטוס שלנו?
GetStatusCode. יש לנו פה מספר קייסים. במידה וה-LocationSettingsStatusCode.success זאת אומרת, אין לנו שום בעיה עם ההגדרות של הלוקיישן במכשיר של היוזר, כאן אנחנו כבר יכולים לבקש רישום לקבלת המיקום של המשתמש.
זאת אומרת שנעתיק את הפונקציה הזאת וכבר אנחנו יכולים להדביק אותה פה בקייס הזה. נבצע הדבקה וכמובן נגדיר כאן ברייק. בואו נעתיק רק את הדירקטיב הזאת למעשה אנחנו יכולים אפילו לגזור אותה ולהדביק אותה פה בצורה כזאת ואז לא תהיה לנו בעיה עם ה-permission.
אז אנחנו נכנסים לקייס הזה אם ההגדרות מספקות. אם ההגדרות לא מספקות אנחנו רוצים קייס נוסף בואו נעתיק נדביק והקייס הנוסף שאנחנו רוצים זה resolution required כלומר דרוש פתרון כי ההגדרות לא מספקות.
במצב הזה אנחנו לא יכולים להירשם ללוקיישן אפדייטס אלא אנחנו צריכים להציג את הדיאלוג. את הדיאלוג אנחנו מציגים על ידי סטטוס סטארט רזולושן פור ריזולט שולחים את עצמנו ואיזשהו ריקווסט קוד למעשה מה שקורה בפקודה הזאת זה המערכת מציגה דיאלוג ואנחנו מקבלים את התשובה על ידי אינטנט כלומר המערכת שולחת אימפליסיט אינטנט
והתשובה שמוחזרת אנחנו צריכים לתפוס אותה כאילו שאנחנו הפעלנו Implicit Intent ואנחנו מקבלים את התשובה ב-On Activity Result.
אז קודם כל אנחנו צריכים לספק פה Request Code אז בואו ניגש פה למעלה נשכפל את ה-Request Code הזה ונקרא לו Request Code Settings נגדיר כאן 2 ניקח את ה-Request Code Settings ונשלח אותו פה בצורה כזאת והמערכת אומרת לנו שבשביל לקרוא
לפקודה הזאת אנחנו צריכים לעטוף את זה ב-try catch אז בואו נגיד לו can surround with try catch ובתוך ה-catch בואו פשוט נציג איזושהי הודעה יש לנו כאן toast make text ונציג לו את ההודעה failed to start דיאלוג נשרשר את e-get message ונשים לו פה איזה length long כזה show נשנה את זה ל-ex נהיה עקביים עם פרויקטים קודמים שביצענו ויש
לנו עכשיו את הבקשה של הדיאלוג כלומר הפקודה הזאת אמורה להציג דיאלוג ליוזר אם היא לא מצליחה להציג דיאלוג אז כמובן אנחנו מציגים איזושהי הודעת פיילינג כזאת ואנחנו יכולים בתשובה שאנחנו מקבלים מהדיאלוג לדעת האם היוזר מסכים לנו ומאשר שינוי של הגדרות הלוקיישן אצלו במכשיר או לא מסכים.
אבל לפני שנעבור לתשובה של הדיאלוג יש לנו עוד קייס אחד שאנחנו צריכים לכתוב וזה מה קורה אם זה לא הראשון ולא השני ובואו נגדיר פה שזה פשוט דיפולט. אם זה דיפולט, גם כאן אנחנו לא יכולים לבקש את העדכונים של הלוקיישן אלא נציג לו איזשהו טוסט דומה.
נעתיק את הטוסט הזה ופשוט נדביק אותו פה ונגדיר לו fail to start location setting dialog אין לנו מעבר לזה error message שאנחנו יכולים להציג אז פשוט נסתפק בזה יופי אז יש לנו כאן את ה-on result שזה בעצם תשובה לגבי מה הסטטוס של הגדרות הלוקיישן במכשיר של המשתמש.
האם הן מספקות או האם הן לא מספקות? אם הן לא מספקות, אנחנו רוצים להציג דיאלוג.