
new Criteria() ומגדירים בו את מה שחשוב לנו, בתוך פונקציה נפרדת כמו get high accuracy best provider.setSpeedRequired), לגובה (setAltitudeRequired) ולכיוון (setBearingRequired), ואסרו פרוויידר בתשלום (setCostAllowed).setAccuracy בוחרים את הדיוק הטוב ביותר (ACCURACY_FINE).locationManager.getBestProvider(criteria, true). ה-true אומר להחזיר רק פרוויידרים שמאופשרים כרגע במכשיר.setAccuracy מגדירים setPowerRequirement עם Criteria.POWER_LOW.הטקסט המלא של הדקות הראשונות בהרצאה «Find Best Provider» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בסרטון הקודם אנחנו הגדרנו איזה פרוויידר ברצוננו לעבוד איתו ולקבל דרכו את מיקום המשתמש. וזה בדיוק היה בשורה הזאת. String Provider שווה Location Manager נקודה, ואז יכלנו להשתמש פה ב-GPS Provider, ב-Network Provider או ב-Passive Provider.
אבל אנחנו יכולים גם לומר למערכת לאתר עבורנו את הפרוויידר הטוב ביותר שנמצא בין האופציות הקיימות כרגע במכשיר, בהתאם לקריטריון מסוים שאנחנו מגדירים.
אז לצורך כך בואו נבנה כאן איזושהי פונקציה, כאן ממש בסוף, בואו נקרא לה get high accuracy best provider. ואנחנו הולכים לבנות פונקציה שבעצם תיאתר את הפרוביידר הטוב ביותר עבור דיוק.
כלומר, איזה פרוביידר כרגע עבור דיוק הכי גבוה הוא פעיל או שאנחנו יכולים לקבל אותו. אז בשביל לומר למערכת לאתר עבורנו את הפרוביידר בהתאם לקריטריון שאנחנו מגדירים, אנחנו צריכים להשתמש עם אובייקט מסוג קריטריה, כלומר קריטריון.
אז בואו נפתח פה Object Criteria, שווה New Criteria, Object Rec, ונתחיל לתאר את מה בעצם אנחנו רוצים. אז לקריטריה יש מספר מאפיינים שאנחנו צריכים להגדיר.
מאפיין ראשון, Set Speed Required. זאת אומרת, האם אנחנו רוצים שהפרוויידר יכיל בתוכו נתון לגבי מהירות המשתמש. ראינו שהפרוויידר יכול להכיל בתוכו, לספק לנו כל מיני נתונים.
Latitude, Longitude, Accuracy. אז יש עוד המון נתונים שהפרוויידר יכול לתת לנו. האם אנחנו רוצים שבין הנתונים האלה יהיה מהירות המשתמש.
אז בואו נניח שלא. בואו נניח שלא מעניין אותי מיקום המשתמש, שייתן לי את מה שהוא מוצא בלי קשר למהירות של המשתמש. set Altitude, האם אנחנו רוצים שהפרווידר יספק לנו גם את ה-Altitude, אנחנו לא רוצים, אנחנו רוצים רק Longitude ו-Latitude, בואו נגדיר לו Bearing Required, זה אומר האם צריך שהיה כיוון בפרווידר, כלומר הפרווידר
יספק גם את כיוון המשתמש, לאן הוא הולך, בואו נניח שלא, בואו ניגש לקריטריה set cost allowed, האם אנחנו רוצים שהפרוויידר יוכל להיות גם כזה שהמשתמש משלם כסף עבורו, בואו נניח שלא, זאת אומרת אנחנו רוצים רק את החינמים ולבסוף set accuracy, איזה רמת דיוק אנחנו רוצים, קריטריה, נקודה, ויש לנו פה לדוגמה accuracy, פיין, בואו נלך על ה-accuracy הטוב ביותר.
לבסוף אנחנו רוצים להחזיר את Location Manager, האובייקט שעבדנו איתו, Get Best Provider, הנה הקריטריה שלנו, ו-True זה אומר, תן לי בבקשה רק את הפרוויידרים שהם כרגע מאופשרים במכשיר, ולא פרוויידרים לדוגמה שהיוזר לא אפשר.
כעת אנחנו יכולים לקחת את הפונקציה הזאת ולהשתמש בה במקום להגדיר פרווידר בצורה hardcoded כזאת. אז בואו נשכפל רגע את השורה הזאת ופשוט נקרא לפונקציה כאן.
בואו נבדוק את זה. אנחנו כבר רואים שאנחנו רצים על המכשיר ועל האמולטור. ואם אנחנו נסתכל רגע על ה-Settings באמולטור, בה הוא ניגש ל-Location, אנחנו נראה שאנחנו נמצאים כרגע ב-High Accuacy, זאת אומרת שכל שלושת הפרוביידרים כרגע מאופשרים,
אז אם אנחנו לוחצים על הלחצן, אנחנו אמורים לקבל את ה-GPS פרוביידר. בואו נלחץ על הלחצן,