פיד הנתונים של המסלול המפורט מספק מידע על ניווט בלבד למכשירים, ולא שמיועד להנחיות ניווט מבוססות מפה. הוא מספק תמרונים עתידיים עם רכיבים שאתם מספקים:
- סמלים (שמאלה, ימינה, פניית U)
- פנייה מספרים בכיכרות
- שמות של דרכים
- מרחקים וזמן משוערים עד לשלב הניווט הבא או לשלב הסופי יעד
אפשר להשתמש בפיד המסלול המפורט כדי ליצור חוויות שבהן ממשק המשתמש של ה-SDK לניווט לא מתאים, למשל ל-Android Auto או למכשירים קטנים מסך שבו אין מקבץ מלא של Android. לדוגמה, יכול לשמש נהגים בכלי רכב דו-גלגליים, הנחיות ניווט בלבד כדי לעזור להם להגיע ליעדים שלהם מהר יותר בראש שקט עם כמה שפחות הסחות דעת.
כדי להשתמש ב-SDK, צריך ליצור שירות ולרשום אותו ב-SDK SDK לניווט עבור Android כדי שיוכל לקבל מידע ניווט חדש בזמן אמת (בערך פעם בשנייה במהלך הניווט).
במסמך הזה מוסבר איך ליצור ולרשום שירות ניווט מקבל מידע ניווט מה-SDK ומספק את מצב הניווט למכשיר המקבל.
סקירה כללית
בקטע הזה נסביר איך להוסיף את הספרייה TurnByTurn לפרויקטים שלכם מסכם את התהליך הכללי ליצירת פונקציונליות של מסלול מפורט.
הוספת ספריית TurnByTurn לפרויקט באמצעות Maven (מומלץ)
כדי לצרוך גרסה עצמאית של הספרייה TurnByTurn, מבצעים את השלבים הבאים:
- מגדירים את הסביבה כדי לגשת למאגר Maven המארח:
Maven
מוסיפים לקובץ
pom.xml
את הנתונים הבאים:<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
Gradle
מוסיפים לקובץ
build.gradle
את הנתונים הבאים:repositories { ... google() }
מוסיפים את יחסי התלות הבאים להגדרות של Maven או Gradle:
-
Maven
<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>google_turnbyturn</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Gradle
dependencies { ... implementation 'com.google.android.maps:google_turnbyturn:1.0.0' }
הוספת ספריית TurnByTurn לפרויקט באמצעות קובץ JAR שהורדת (חלופה)
ספריית TurnByTurn זמינה כקובץ JAR בתיקיית ה-SDK הזו. אם אין לכם גישה, פנו לנציג שלכם.
- מורידים את
google_turnbyturn_*.jar
ומחלצים אותו. - מעתיקים את קובץ ה-JAR שהורדתם לספריית
app/libs
של הפרויקט. כדי לכלול את ה-JAR ב-build, צריך להוסיף את קטעי הקוד הבאים ל-
build.gradle
.dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
שימוש בספריית TurnByTurn
אלה השלבים הכלליים להפעלת פונקציונליות של מסלול מפורט. הבאים מספקים פרטים לגבי כל שלב.
צריך ליצור שירות כדי לקבל עדכוני ניווט
ערכת ה-SDK לניווט מקושרת לשירות TurnByTurn ו- שולח אליו עדכוני ניווט דרך Android מסנג'ר הקצר הזה. התשובות שלך יעזרו לנו להשתפר. אפשר ליצור שירות ניווט חדש לעדכונים האלה, או להשתמש בשירות ניווט קיים לאחר השיפור.
היתרון של שימוש בשירות לקבלת עדכוני ניווט הוא שהשירות יכולים לחיות בתהליך נפרד ברקע.
השירות בדוגמה הבאה מקבל פרטי ניווט ומשתמש
את TurnByTurnManager
כדי להמיר את הנתונים לאובייקט NavInfo
מכיל את פרטי הניווט.
/** * Receives turn-by-turn navigation information forwarded from NavSDK. */ public class NavInfoReceivingService extends Service { /** The messenger used by the service to receive nav step updates. */ private Messenger incomingMessenger; private TurnByTurnManager turnByTurnManager; private final class IncomingNavStepHandler extends Handler { public IncomingNavStepHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // Identify the message through the msg.what field. if (TurnByTurnManager.MSG_NAV_INFO == msg.what) { // Extract the NavInfo object using the TurnByTurnManager. NavInfo navInfo = turnByTurnManager .readNavInfoFromBundle(msg.getData())); // Do something with the NavInfo } } } @Nullable @Override public IBinder onBind(Intent intent) { return incomingMessenger.getBinder(); } @Override public void onCreate() { turnByTurnManager = TurnByTurnManager.createInstance(); HandlerThread thread = new HandlerThread("NavInfoReceivingService", Process.THREAD_PRIORITY_DEFAULT); thread.start(); incomingMessenger = new Messenger( new IncomingNavStepHandler(thread.getLooper())); }
קודים של הודעות
אפשר לזהות NavInfo
הודעות באמצעות
Message.what
שדה של המחלקה Message
, המוגדר לערך
TurnByTurnManager.MSG_NAV_INFO
רישום השירות לעדכוני ניווט
קטעי הקוד הבאים רושמים את שירות הניווט.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
הפעלה ועצירה של השירות
שירות הניווט פעיל כל עוד
SDK לניווט מקושר אליו. אפשר להתקשר ידנית
startService()
ו-stopService()
כדי לקבוע את חיי שירות הניווט
אבל כאשר תרשום את השירות באמצעות
SDK לניווט, השירות יופעל באופן אוטומטי.
מפסיק רק כשמבטלים את הרישום. בהתאם לאופן שבו הגדרתם את האפליקציה, ייתכן
אני רוצה לשקול להתחיל שירות שפועל בחזית, כפי שמתואר ב-Android
תיעוד שירותים
סקירה כללית.
ביטול הרישום של השירות
כדי להפסיק לקבל עדכוני ניווט, מבטלים את הרישום של השירות SDK ניווט.
navigator.unregisterServiceForNavUpdates();
הסבר על מצבי הניווט
יש להשתמש ב-NavInfo.getNavState()
כדי לקבל את מצב הניווט הנוכחי, שהוא אחד
הבאים:
מעבר – המשמעות של המצב
ENROUTE
היא שכרגע הניווט המודרך פעיל והמשתמש נמצא במסלול שצוין. מידע על הפעילות הנוכחית צעד התמרון הבא זמין.ניתוב מחדש – המשמעות של
REROUTING
היא שהניווט מתבצע, אבל כלי הניווט מחפש מסלול חדש. שלב התמרון הבא אינו זמין כי אין עדיין מסלול חדש. באפליקציה לדוגמה, יוצג הכיתוב 'ניתוב מחדש...' ההודעה מופיעה ב- ותצוגת פרטי הניווט. אחרי שיימצא מסלול, תופיע ההודעהNavInfo
נשלח עם המדינהENROUTE
.הפסיקה – המשמעות של
STOPPED
היא שהניווט הסתיים. לדוגמה, ניווט נפסקת כשהמשתמש יוצא מהניווט באפליקציה. באפליקציה לדוגמה, המצבSTOPPED
מנקה את תצוגת פרטי הניווט כדי למנוע את המשך ההשהיה מהצגת ההוראות.
אכלוס תצוגת הפיד
לאחר שהגדרת את המסלול המפורט, הקטע הזה עוסק ברכיבים חזותיים ובטקסטים שאפשר להשתמש בהם כדי לאכלס את כרטיסי ההנחיות עם מסלול מפורט.
שדות מידע של כרטיס ניווט
כשהמשתמש ייכנס לניווט מודרך, כרטיס ניווט יופיע בחלק העליון של הדף. שמכיל נתוני ניווט שאוכלסו SDK ניווט. התמונה הקשורה מציגה דוגמה ל ברכיבי הניווט הבסיסיים האלה.
בטבלה הזו מוצגים השדות של פרטי הניווט והמיקום שלהם.
השדות לכל שלב בניווט | שדות לנסיעה הכוללת |
---|---|
נמצא ב-StepInfo |
נמצא ב-NavInfo |
השם המלא של הכביש | הזמן שנשאר |
סמל התמרון | מרחק מהיעד |
המרחק לשלב הבא | |
שדות של הכוונה לנתיב |
הנחייה בין נתיבים
ה-SDK לניווט מייצג נתיבים בניווט
הפעלת הכרטיס בתור
נתיב
וגם
LaneDirection
אובייקטים של נתונים. אובייקט Lane
מייצג נתיב ספציפי במהלך הניווט
כולל רשימה של LaneDirection
אובייקטים שמתארת את כל הפיתות שיכולות
עשוי מהנתיב הזה.
הכיוון המומלץ שהמשתמש צריך לנסוע בנתיב מסומן על ידי isRecommended השדה הזה.
דוגמה להנחיה בין נתיבים
קטע הקוד הבא ממחיש את ייצוג הנתונים של הנתיבים המוצגים למעלה.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
יצירת סמלים לתמרונים
Maneuver
'טיפוסים בני מנייה (enum)' מגדיר כל תמרון אפשרי שעשוי להתרחש במהלך ניווט,
הוא יכול לקבל את התמרון לשלב נתון מהשיטה StepInfo.getManeuver()
.
עליכם ליצור סמלי תמרון ולהתאים אותם לתמרונים המשויכים אליהם.
בתמרונים מסוימים אפשר להגדיר מיפוי אחד לאחד לסמל, כמו
DESTINATION_LEFT
וגם DESTINATION_RIGHT
אבל מכיוון שיש תמרונים
בדומה לכך, ייתכן שתרצו למפות יותר מתמרון אחד לסמל אחד. עבור
לדוגמה TURN_LEFT
ו-ON_RAMP_LEFT
יכולים למפות את שתי האפשרויות לסמל הפנייה שמאלה.
חלק מהתמרונים מכילים תווית נוספת: clockwise
או counterclockwise
ערכת ה-SDK קובעת לפי הצד המניע של המדינה. לדוגמה, ב-
במדינות שבהן הנהיגה בצד שמאל של הכביש, הנהגים לוקחים
כיכר או סיבוב U בכיוון השעון, ואילו בצד ימין של הכביש
עוברים בכיוון השעון. SDK הניווט מזהה
אם תמרון מתרחש בתנועה שמאלה או ימינה, ומפיק את הפלט
תמרון מתאים. לכן, סמל התמרון שלך עשוי להיות שונה עבור
בכיוון השעון לעומת תמרון נגד כיוון השעון.
אפשר להרחיב כדי לראות דוגמאות לסמלים של תמרונים שונים
סמל לדוגמה | תמרוני פנייה |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
|
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
|
ROUNDABOUT_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_CLOCKWISE
|
|
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_EXIT_CLOCKWISE
|
|
MERGE_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|
שימוש בסמלים שנוצרו
כדי לאפשר שימוש בתרחישים לדוגמה של Android Auto, SDK לניווט תומך ביצירת תמרון ונתיב סמלי הכוונה. הסמלים האלה מתאימים לגודל התמונה של Android Auto ספריית אפליקציות לרכב שממליצה לטרגט לתיבה תוחמת מסוג 500 x 74 dp. צפייה setsLaneImage וגם CarIcon במסמכי העזרה של Android לקבלת פרטים נוספים.
דוגמה ליצירת סמל
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
אחרי שמפעילים את יצירת הסמלים, האובייקט TurnbyTurn StepInfo
מאכלס את
השדות maneuverBitmap ו-lanesBitmap עם הסמלים.
המאמרים הבאים
- באפליקציות ל-Android Auto: