शुरुआती जानकारी
Navigation SDK (Nav SDK) में, मोड़-दर-मोड़ नेविगेशन की बेहतरीन सुविधा मिलती है. यह सुविधा, ग्राहकों और ड्राइवर के लिए बहुत मददगार हो सकती है. खास तौर पर, नए ड्राइवर या ऐसे ड्राइवर के लिए जो उस इलाके से वाक़िफ़ नहीं हैं. हालांकि, कुछ ऐसे मामले होते हैं जिनमें कंपनियां, ड्राइवर का ध्यान सड़क से हटाने के लिए टर्न-बाय-टर्न नेविगेशन यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल नहीं करना चाहती हैं. हालांकि, वे अब भी वाहन की जगहों को ट्रैक करना चाहती हैं और उस रास्ते से जुड़े इवेंट सुनना चाहती हैं जिस पर वे चल रहे हैं. इसका एक उदाहरण ट्रक ड्राइवर हैं. खास तौर पर, अगर वे खतरनाक सामान ले जा रहे हैं. डिलीवरी करने वाली अन्य कंपनियां, अलग-अलग तरीकों का इस्तेमाल करती हैं. जैसे, कम दूरी के लिए पैदल चलना. इसलिए, हो सकता है कि उन्हें मोड़-दर-मोड़ निर्देश पाने की सुविधा की ज़रूरत न पड़े. इससे डिवाइस की बैटरी लाइफ़ भी बचेगी.
स्कोप
इस दस्तावेज़ में बताया गया है कि कंपनियां, Nav SDK से नेविगेशन मैप (व्यू) को कैसे छिपा सकती हैं. साथ ही, वे लोकेशन ट्रैकिंग, इवेंट सदस्यताएं, और कॉलबैक के बारे में Nav SDK की सभी सुविधाओं का फ़ायदा कैसे पा सकती हैं. हेडलेस मोड में Nav SDK से कैप्चर किए गए डेटा का इस्तेमाल, वाहनों को ट्रैक करने की सुविधा को बेहतर बनाने के लिए किया जा सकता है. साथ ही, इससे ईटीए को ज़्यादा सटीक तरीके से समझने में मदद मिलती है. इससे पारदर्शिता और बेहतर परफ़ॉर्मेंस मिलती है.
Navigation SDK
Navigation SDK, Android / iOS की एक नेटिव लाइब्रेरी है. इसे ड्राइवर ऐप्लिकेशन में जोड़ा जाता है. मोबिलिटी के संदर्भ में, यह इन कामों के लिए ज़िम्मेदार है:
- सड़क के हिसाब से जगह की जानकारी को स्नैप करने वाले ऐप्लिकेशन से जगह की जानकारी पाना. सड़क के हिसाब से जगह की जानकारी, Android के FusedLocationProvider (FLP) से ज़्यादा सटीक होती है. ऐसा इसलिए, क्योंकि यह Google के सड़क नेटवर्क का इस्तेमाल करके, जगहों की जानकारी को सड़क के सबसे नज़दीकी सेगमेंट से जोड़ता है. इससे FLP से मिलने वाली जानकारी, जैसे कि पहुंचने का अनुमानित समय (ईटीए) ज़्यादा सटीक होता है.
- मोड़-दर-मोड़ अनुभव, जिससे ड्राइवर रीयल-टाइम ट्रैफ़िक और रास्ते से जुड़ी अन्य पाबंदियों को ध्यान में रखते हुए, एक जगह से दूसरी जगह पर आसानी से जा सकते हैं.
- इवेंट लिसनर और रजिस्टर किए गए कॉलबैक के ज़रिए, रूट की प्रोग्रेस, जगह, स्पीड वगैरह के आधार पर इवेंट ट्रिगर करना.
डिफ़ॉल्ट रूप से 'Play कंसोल' का नया वर्शन चुनें
जब ग्राहक Nav SDK लागू करते हैं, तो यह मान लिया जाता है कि उन्हें मोड़-दर-मोड़ निर्देश पाने की सुविधा की ज़रूरत है. इसलिए, Nav SDK के दस्तावेज़ (Android और iOS) में, मोड़-दर-मोड़ निर्देश देने की सुविधा के साथ Nav SDK को लागू करने के तरीके के बारे में निर्देश दिए गए हैं.
Android पर, ऐप्लिकेशन में मोड़-दर-मोड़ मैप को रेंडर करने के लिए, SupportNavigationFragment या NavigationView का इस्तेमाल किया जाता है. वहीं, iOS पर इसके लिए GMSMapView का इस्तेमाल किया जाता है. इन यूज़र इंटरफ़ेस (यूआई) एलिमेंट की मदद से, आपके ऐप्लिकेशन में इंटरैक्टिव मैप और रास्ते के दिशा-निर्देश यूज़र इंटरफ़ेस (यूआई) जोड़ा जाता है.
अगले सेक्शन में, हम Android और iOS, दोनों के लिए डिफ़ॉल्ट Nav SDK की तुलना, बारी-बारी से निर्देशों की सुविधा चालू करने वाले कोड के साथ हेडलेस Nav SDK कोड से करते हैं. साथ ही, ज़रूरी बदलावों को हाइलाइट करते हैं.
समाधान
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);
जैसा कि आप देख सकते हैं, व्यू उस लेआउट की ओर इशारा करता है जिसका इस्तेमाल नेविगेशन के लिए किया जाना चाहिए. इस मामले में, NavigationView के बजाय SupportNavigationFragment बनाया गया है.
Nav SDK को हेडलेस मोड पर शुरू करने के लिए, हमें बस उन दो निर्देशों को हटाना होगा. अगर हेडलेस और नॉन-हेडलेस (ऐक्टिव नेविगेशन) के बीच टॉगल करना है, तो यह तय करने के लिए किसी वैरिएबल का इस्तेमाल किया जा सकता है कि हेडलेस का इस्तेमाल करना ज़रूरी है या नहीं. उदाहरण के लिए:
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 वैरिएबल को यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट (जैसे, टॉगल) से लिंक किया जा सकता है. इससे हेडलेस मोड को चालू या बंद किया जा सकेगा.
|
|
| नेविगेशन की सुविधा चालू होने पर 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 में बारी-बारी से मिलने वाली सूचनाओं में बदलाव करना लेख पढ़ें.