مقدمه
Navigation SDK (Nav SDK) بهترین ویژگی گام به گام کلاس را ارائه می دهد که می تواند برای مشتریان و رانندگان، به ویژه رانندگان جدید یا رانندگانی که با منطقه آشنا نیستند، بسیار مفید باشد. با این حال، موارد استفاده خاصی وجود دارد که شرکتها نمیخواهند توجه رانندگان را با رابط کاربری ناوبری گام به گام از جاده خارج کنند، اما همچنان میخواهند مکانهای خودرو را ردیابی کنند و به رویدادهای مرتبط با مسیری که دنبال میکنند گوش دهند. یک مثال رانندگان کامیون هستند، به خصوص اگر مواد خطرناک را حمل می کنند. سایر شرکتهایی که با روشهای مختلف تحویل میدهند - مانند پیادهروی در مسافتهای کوتاه - ممکن است نیازی به فعال کردن چرخش به نوبه نداشته باشند و این باعث صرفهجویی در عمر باتری دستگاه میشود.
دامنه
این سند توضیح میدهد که چگونه شرکتها میتوانند نقشه ناوبری (نما) را از Nav SDK پنهان کنند و همچنان از همه ویژگیهای Nav SDK در رابطه با ردیابی موقعیت، اشتراک رویدادها و تماسهای برگشتی بهره ببرند. دادههای جمعآوریشده از Nav SDK در حالت headless میتواند برای بهبود قابلیت ردیابی وسایل نقلیه و درک دقیقتر ETA استفاده شود که در نهایت منجر به شفافیت و کارایی میشود.
Navigation SDK
Navigation SDK یک کتابخانه بومی Android / iOS است که به برنامه درایور اضافه شده است. در زمینه تحرک، مسئولیت دارد:
- به دست آوردن مکان های ضبط شده از جاده از برنامه ای که آن را اجرا می کند. مکانهای شناساییشده در جادهها از FusedLocationProvider (FLP) اندروید دقیقتر هستند، زیرا از شبکه جادهای Google برای گرفتن مکانها به نزدیکترین بخش جاده استفاده میکند، که ETA و سایر اطلاعات FLP را بسیار دقیقتر میکند.
- تجربه گام به گام که به رانندگان اجازه می دهد تا با در نظر گرفتن ترافیک بلادرنگ و سایر محدودیت های مسیر، به طور موثر از نقطه A به نقطه B بروند.
- شلیک رویدادها بر اساس پیشرفت مسیر، مکان، سرعت و غیره از طریق شنوندگان رویداد و تماس های ثبت شده.
تجربه پیش فرض
هنگامی که مشتریان Nav SDK را پیاده سازی می کنند، فرض بر این است که آنها به ویژگی نوبت به نوبه خود نیاز دارند. به همین دلیل است که اسناد Nav SDK ( اندروید و iOS ) دستورالعملهایی در مورد نحوه پیادهسازی Nav SDK با فعال کردن نوبت به نوبت ارائه میدهد.
در اندروید، رندر کردن نقشه گام به گام در برنامه با استفاده از SupportNavigationFragment یا NavigationView انجام می شود، در حالی که در iOS این یک GMSMapView است. این عناصر رابط کاربری، نقشه تعاملی و رابط کاربری ناوبری گام به گام را به برنامه شما اضافه می کنند.
در بخش بعدی، Nav SDK پیشفرض را با کد فعالسازی مرحله به مرحله با کد Nav SDK بدون هد برای اندروید و iOS مقایسه میکنیم و تغییرات مورد نیاز را برجسته میکنیم.
راه حل
اندروید
در اندروید، این کد جاوا است که به عنوان بخشی از برنامه نمونه 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);
همانطور که می بینید، view به چیدمانی اشاره می کند که باید برای ترسیم تجربه ناوبری استفاده شود و در این مورد، یک SupportNavigationFragment به جای NavigationView ایجاد می شود.
برای شروع Nav SDK در حالت headless، به سادگی باید آن دو دستورالعمل را حذف کنیم. اگر ایده جابجایی بین headless و non-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 در حال اجرا با پیمایش فعال (هدلس خاموش) | همان برنامه اما اکنون با Nav SDK در حال اجرا در حالت بدون سر |
همانطور که در مثال سمت راست بالا می بینید، ناوبری Nav SDK در زیر صحنه اجرا می شود اما تجربه گام به گام غیرفعال است.
iOS
در حالت بدون هدلس iOS میتوان با افزودن تنظیمات زیر در طول مقداردهی اولیه 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
}()
ببینید چگونه به نظر می رسد - صفحه نمایش به نحوه پیاده سازی رابط کاربری بستگی دارد و اسکرین شات فقط برای نشان دادن اثر پنهان کردن mapView است:
![]() | ![]() |
ناوبری فعال فعال است نمونه برنامه iOS | همان برنامه در حالت بدون سر |
ملاحظات پیاده سازی
از آنجایی که حالت بدون سر چیزی جز پنهان کردن نقشه ناوبری از روی صفحه نمایش نیست، فقط زمان صفحه نمایش ذخیره می شود که باعث می شود باتری بیشتری در دستگاه تولید شود. با این حال، از آنجایی که Nav SDK به کار خود ادامه میدهد، بهروزرسانیهای مکان و همه تماسهای رویداد به طور معمول فعال میشوند، بنابراین هیچ عارضه جانبی در استفاده از این پیکربندی وجود ندارد.
نتیجه گیری
این سند نشان میدهد که Nav SDK چقدر انعطافپذیر است و با توجه به محدودیتهای سیستمعاملهای مختلف، چه چیزی میتوانیم به دست آوریم. همچنین به مشتریان این امکان را می دهد که تجربه رانندگی خود را برای جلوگیری از حواس پرتی و بهبود ایمنی شخصی سازی کنند.
منابع اضافی
اگر اعلانها باید در حین پیمایش غیرفعال شوند، به دلایلی که ذکر شد، این امر نیز قابل دستیابی است، لطفاً به اصلاح نوتیفیکیشنهای نوبتی در Nav SDK مراجعه کنید.