فید داده گامبهگام اطلاعات فقط ناوبری را به دستگاههایی ارائه میدهد که برای راهنمایی ناوبری مبتنی بر نقشه طراحی نشدهاند. این مؤلفه مانورهای پیشرو را با عناصری که ارائه میدهید فراهم میکند:
- نمادها (چپ، راست، دوربرگردان)
- دور زدن در میدانها
- نام جادهها
- مسافت و زمان تخمینی تا مرحله بعدی پیمایش یا مقصد نهایی
میتوانید از فید گامبهگام برای ایجاد تجربههایی استفاده کنید که در آنها رابط کاربری کامل Navigation SDK مناسب نیست، مثلاً برای Android Auto یا برای نمایشگرهای کوچک که پشته کامل Android دردسترس نیست. برای مثال، میتوانید از این ویژگی برای رانندگان وسایل نقلیه دوچرخ استفاده کنید، جایی که میتوانید راهنماییهای فقط ناوبری را نمایش دهید تا به آنها کمک کنید سریعتر و با اطمینان بیشتر و با کمترین حواسپرتی به مقصد برسند.
برای استفاده از کیت توسعه نرمافزار، سرویسی ایجاد میکنید و آن را در «کیت توسعه نرمافزار پیمایش برای Android» ثبت میکنید تا بتواند اطلاعات پیمایش جدید را در زمان واقعی (تقریباً یک بار در ثانیه درطول پیمایش) دریافت کند.
این سند به شما نشان میدهد که چگونه یک سرویس ناوبری ایجاد و ثبت کنید که اطلاعات ناوبری را از SDK دریافت میکند و وضعیت ناوبری را به دستگاه گیرنده ارائه میدهد.
نمای کلی
این بخش جریان سطح بالا را برای فعال کردن ویژگی گامبهگام خلاصه میکند.
استفاده از ویژگی «گامبهگام»
مراحل سطح بالا برای فعال کردن ویژگی گامبهگام در اینجا آمده است. بخشهای زیر جزئیات مربوط به هر مرحله را ارائه میدهند.
سرویسی برای دریافت بهروزرسانیهای ناوبری ایجاد کنید
کیت توسعه نرمافزار پیمایش به سرویس «گامبهگام» شما متصل میشود و بهروزرسانیهای پیمایش را ازطریق Android Messenger به آن ارسال میکند. میتوانید سرویس پیمایش جدیدی برای این بهروزرسانیها ایجاد کنید یا از سرویس موجودی استفاده کنید.
مزیت استفاده از سرویس برای دریافت بهروزرسانیهای ناوبری این است که سرویس میتواند در فرایند پسزمینهای جداگانهای قرار داشته باشد.
سرویس در مثال زیر اطلاعات ناوبری را دریافت میکند و از
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);
شروع و توقف سرویس
سرویس پیمایش تا زمانی فعال است که
کیت توسعه نرمافزار پیمایش به آن متصل باشد. میتوانید بهصورت دستی
startService() و stopService() را فراخوانی کنید تا چرخه حیات سرویس ناوبری را کنترل کنید، اما وقتی سرویس خود را با
کیت توسعه نرمافزار ناوبری ثبت میکنید، سرویس شما بهطور خودکار شروع میشود و
تنها زمانی متوقف میشود که ثبت آن را لغو کنید. بسته به نحوه راهاندازی برنامهتان، ممکن است بخواهید راهاندازی سرویس پیشزمینهای را که در سند Android نمای کلی سرویسها شرح داده شده است درنظر بگیرید.
درحال لغو ثبت سرویس
برای توقف دریافت بهروزرسانیهای ناوبری، سرویس را از کیت توسعه نرمافزار ناوبری لغو ثبت کنید.
navigator.unregisterServiceForNavUpdates();
آشنایی با حالتهای پیمایش
از NavInfo.getNavState() برای دریافت وضعیت فعلی پیمایش استفاده کنید که یکی از موارد زیر است:
در مسیر - وضعیت
ENROUTEیعنی پیمایش راهنماییشده فعال است و کاربر در مسیر ارائهشده قرار دارد. اطلاعات مربوط به مرحله مانور آتی فعلی دردسترس است.درحال تغییر مسیر -
REROUTINGیعنی پیمایش درحال انجام است، اما ناوبر بهدنبال مسیر جدیدی است. مرحله مانور بعدی دردسترس نیست، چون هنوز مسیر جدیدی وجود ندارد. در برنامه نمونه، پیام «درحال مسیریابی مجدد…» در نمایشگر اطلاعات ناوبری نشان داده میشود. وقتی مسیری پیدا شد، پیامNavInfoبا وضعیتENROUTEارسال میشود.متوقف شد -
STOPPEDیعنی ناوبری پایان یافته است. برای مثال، وقتی کاربر از پیمایش در برنامه خارج میشود، پیمایش متوقف میشود. در برنامه نمونه، وضعیتSTOPPEDنمایش اطلاعات پیمایش را پاک میکند تا از نمایش دستورالعملهای مرحلهای باقیمانده جلوگیری شود.
پر کردن نمایش فید
اکنون که سرویس گامبهگام خود را راهاندازی کردهاید، این بخش عناصر دیداری و نوشتاری را پوشش میدهد که میتوانید برای پر کردن کارتهای راهنمایی برای فید گامبهگام استفاده کنید.
فیلدهای اطلاعات کارت پیمایش
وقتی کاربر وارد ناوبری راهنماییشده میشود، کارت ناوبری در بالا ظاهر میشود، که حاوی دادههای ناوبری است که از کیت توسعه نرمافزار Navigation پر شده است. تصویر مرتبط نمونهای از این عناصر ضروری پیمایش را نشان میدهد.
این جدول فیلدهای اطلاعات پیمایش و جایی را که میتوانید آنها را پیدا کنید نشان میدهد.
| فیلدهای مربوط به هر مرحله پیمایش | فیلدهای کل سفر |
|---|---|
در StepInfo پیدا شد |
در NavInfo پیدا شد |
| نام کامل جاده | زمان باقیمانده |
| نماد مانور | فاصله تا مقصد |
| فاصله تا مرحله بعدی | |
| فیلدهای راهنمای باند |
راهنمای خطوط
Navigation SDK لاینها را در کارت پیچ ناوبری بهصورت اشیای دادهای Lane و 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 اضافی هستند،
که کیت توسعه نرمافزار آن را براساس جهت رانندگی در کشور تعیین میکند. برای مثال، در کشورهایی که رانندگی در سمت چپ جاده است، رانندگان در جهت ساعتگرد وارد میدان میشوند یا دور کامل میزنند، درحالیکه در کشورهایی که رانندگی در سمت راست جاده است، رانندگان در جهت ساعتگرد حرکت میکنند. کیت توسعه نرمافزار Navigation تشخیص میدهد که آیا مانور در ترافیک سمت چپ یا راست رخ میدهد و مانور مناسب را خروجی میدهد. بنابراین، نماد مانور شما ممکن است برای مانور ساعتگرد درمقایسه با پادساعتگرد متفاوت باشد.
برای دیدن نمادهای نمونه برای مانورهای مختلف، ازهم باز کنید
| نماد نمونه | مانورهای گامبهگام |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_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_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
استفاده از نمادهای تولیدشده
برای تسهیل موارد استفاده Android Auto، Navigation SDK از تولید نمادهای راهنمای مانور و لاین پشتیبانی میکند. این نمادها با راهنمای اندازه تصویر کتابخانه برنامه خودرو Android Auto مطابقت دارند که هدفیابی جعبه مرزی ۵۰۰ × ۷۴ 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:







































