מבוא
Navigation SDK (Nav SDK) מספק תכונה מובילה של הנחיות נסיעה מפורטות, שיכולה לעזור מאוד ללקוחות ולנהגים, במיוחד לנהגים חדשים או לנהגים שלא מכירים את האזור. עם זאת, יש מקרים ספציפיים שבהם חברות לא רוצות להסיח את דעת הנהגים מהכביש באמצעות ממשק משתמש של ניווט מפורט, אבל עדיין רוצות לעקוב אחרי מיקומי כלי הרכב ולהאזין לאירועים שקשורים למסלול שבו הם נוסעים. דוגמה אחת היא נהגי משאיות, במיוחד אם הם מובילים חומרים מסוכנים. חברות אחרות שמבצעות משלוחים בדרכים שונות – כמו הליכה למרחקים קצרים – אולי לא ידרשו הפעלה של הנחיות הגעה מפורטות, וכך יחסכו את חיי הסוללה של המכשיר.
היקף
במאמר הזה מוסבר איך חברות יכולות להסתיר את מפת הניווט (התצוגה) מ-Nav SDK ועדיין ליהנות מכל התכונות של Nav SDK שקשורות למעקב אחר מיקום, להרשמה לאירועים ולקריאות חוזרות (callback). אפשר להשתמש בנתונים שנאספים מ-Nav SDK במצב headless כדי לשפר את היכולת לעקוב אחרי כלי רכב ולהבין את זמני ההגעה המשוערים בצורה מדויקת יותר, וכך להגביר את השקיפות והיעילות.
Navigation SDK
Navigation SDK היא ספריית Native ל-Android או ל-iOS שמוסיפים לאפליקציית הנהג. בהקשר של ניידות, היא אחראית ל:
- קבלת מיקומים שמוצמדים לכביש מהאפליקציה שמריצה אותו. המיקומים שמוצמדים לכביש מדויקים יותר מ-FusedLocationProvider (FLP) של Android, כי הם משתמשים ברשת הכבישים של Google כדי להצמיד מיקומים לקטע הכביש הקרוב ביותר. כך הערכות זמני ההגעה ומידע אחר מ-FLP מדויקים הרבה יותר.
- חוויית ניווט מפורט שמאפשרת לנהגים להגיע מנקודה א' לנקודה ב' ביעילות, תוך התחשבות במצב התנועה בזמן אמת ובמגבלות אחרות במסלול.
- הפעלת אירועים על סמך התקדמות המסלול, המיקום, המהירות וכו' באמצעות פונקציות event listener וקריאות חוזרות (callback) רשומות.
גרסה בברירת מחדל
כשלקוחות מטמיעים את Nav SDK, אנחנו מניחים שהם צריכים את התכונה של הנחיות ניווט מפורטות. לכן במסמכי התיעוד של Nav SDK (ל-Android ול-iOS) מוסבר איך להטמיע את Nav SDK עם הפעלה של הנחיות נסיעה מפורטות.
ב-Android, כדי לבצע רינדור של המפה עם מסלול הניווט המפורט באפליקציה, משתמשים ב-SupportNavigationFragment או ב-NavigationView, ואילו ב-iOS משתמשים ב-GMSMapView. רכיבי ממשק המשתמש האלה מוסיפים לאפליקציה את המפה האינטראקטיבית ואת ממשק המשתמש של הניווט המפורט.
בקטע הבא אנחנו משווים בין קוד ברירת המחדל של Nav SDK עם קוד מופעל של הנחיות נסיעה מפורטות, לבין קוד של Nav SDK ללא ממשק משתמש, גם ל-Android וגם ל-iOS, ומדגישים את השינויים הנדרשים.
פתרון
Android
ב-Android, זהו קוד Java שמגיע כחלק מאפליקציית הדוגמה של Nav SDK.
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
כפי שאפשר לראות, נקודת התצוגה מצביעה על הפריסה שצריך להשתמש בה כדי לצייר את חוויית הניווט, ובמקרה הזה, נוצר SupportNavigationFragment במקום NavigationView.
כדי להפעיל את Nav SDK במצב headless, פשוט מסירים את שתי ההוראות האלה. אם רוצים לעבור בין מצב headless למצב לא headless (ניווט פעיל), אפשר להשתמש במשתנה כדי לקבוע אם צריך להשתמש במצב headless או לא. לדוגמה:
Boolean mHeadless = true;
אחר כך אפשר להשתמש בו, למשל כך:
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
אפשר לקשר את המשתנה mHeadless
לרכיב בממשק המשתמש (למשל, מתג) שיפעיל או ישבית את מצב ה-headless בהתאם.
![]() |
![]() |
Nav SDK פועל עם ניווט פעיל (headless מושבת) | אותה אפליקציה, אבל עכשיו עם Nav SDK שפועל במצב headless |
כפי שאפשר לראות בדוגמה השמאלית שלמעלה, הניווט באמצעות Nav SDK פועל ברקע, אבל חוויית הניווט מנקודה לנקודה מושבתת.
iOS
ב-iOS, אפשר להפעיל מצב headless בקלות רבה על ידי הוספת ההגדרה הבאה במהלך האתחול של MapView: \
mapView.isHidden = true
לדוגמה:
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
כדי לראות איך זה ייראה – המסך ישתנה בהתאם לאופן ההטמעה של ממשק המשתמש, וצילום המסך נועד רק להמחשת ההשפעה של הסתרת תצוגת המפה:
![]() |
![]() |
ניווט פעיל שפועל ב
אפליקציה לדוגמה ל-iOS |
אותה אפליקציה במצב 'דפדפן ללא GUI' |
למה כדאי ליישם מעקב אחר אירועים?
מצב ללא ממשק משתמש הוא פשוט הסתרה של מפת הניווט מהמסך, ולכן נשמר רק זמן המסך, מה שמאריך את חיי הסוללה במכשיר. עם זאת, מכיוון ש-Nav SDK ימשיך לפעול, עדכוני המיקום וכל הקריאות החוזרות (callback) של האירועים יופעלו כרגיל, ולכן אין תופעות לוואי לשימוש בהגדרה הזו.
סיכום
במסמך הזה אנחנו מראים עד כמה Nav SDK גמיש, ומה אפשר להשיג במערכות הפעלה שונות בהתאם למגבלות שלהן. האפליקציה גם מאפשרת ללקוחות להתאים אישית את חוויית הנהיגה כדי להימנע מהסחות דעת ולשפר את הבטיחות.
מקורות מידע נוספים
אם יש צורך להשבית את ההתראות במהלך הניווט, בגלל הסיבות שצוינו למעלה, אפשר לעשות זאת. מידע נוסף זמין במאמר שינוי ההתראות שלב אחר שלב ב-Nav SDK.