नेविगेशन SDK टूल - बिना ग्राफ़िक यूज़र इंटरफ़ेस वाला मोड

शुरुआती जानकारी

Navigation SDK (Nav SDK) में, टर्न-बाय-टर्न नेविगेशन की बेहतरीन सुविधा मिलती है. यह सुविधा, ग्राहकों और ड्राइवर के लिए बहुत मददगार हो सकती है. खास तौर पर, नए ड्राइवर या ऐसे ड्राइवर जो उस इलाके से वाक़िफ़ नहीं हैं. हालांकि, कुछ ऐसे मामले होते हैं जिनमें कंपनियां, ड्राइवर का ध्यान सड़क से हटाने के लिए टर्न-बाय-टर्न नेविगेशन यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल नहीं करना चाहती हैं. हालांकि, वे अब भी वाहनों की लोकेशन ट्रैक करना चाहती हैं और उनके रास्ते से जुड़े इवेंट सुनना चाहती हैं. इसका एक उदाहरण ट्रक ड्राइवर हैं. खास तौर पर, अगर वे खतरनाक सामान ले जा रहे हैं. डिलीवरी करने वाली अन्य कंपनियां, अलग-अलग तरीकों का इस्तेमाल करती हैं. जैसे, कम दूरी के लिए पैदल चलना. इसलिए, हो सकता है कि उन्हें भी बारी-बारी से निर्देश पाने की सुविधा की ज़रूरत न पड़े. इससे डिवाइस की बैटरी लाइफ़ भी बचेगी.

स्कोप

इस दस्तावेज़ में बताया गया है कि कंपनियां, Nav SDK से नेविगेशन मैप (व्यू) को कैसे छिपा सकती हैं. साथ ही, लोकेशन ट्रैकिंग, इवेंट सदस्यता, और कॉलबैक के बारे में Nav SDK की सभी सुविधाओं का फ़ायदा कैसे पा सकती हैं. हेडलेस मोड में Nav SDK से कैप्चर किए गए डेटा का इस्तेमाल, वाहनों को ट्रैक करने की सुविधा को बेहतर बनाने के लिए किया जा सकता है. साथ ही, इससे ईटीए को ज़्यादा सटीक तरीके से समझने में मदद मिलती है. इससे पारदर्शिता और बेहतर परफ़ॉर्मेंस मिलती है.

नेविगेशन SDK एक मूल Android / iOS लाइब्रेरी है जिसे ड्राइवर ऐप में जोड़ा जाता है. गतिशीलता के संदर्भ में, यह निम्न के लिए ज़िम्मेदार है:

  • सड़क के हिसाब से जगह की जानकारी को ऐप्लिकेशन से पाना. सड़क-स्नैप किए गए स्थान Android के FusedLocationProvider (FLP) की तुलना में अधिक सटीक होते हैं, क्योंकि यह निकटतम सड़क खंड में स्थानों को स्नैप करने के लिए Google के सड़क नेटवर्क का उपयोग करता है, जिससे FLP से ETA और अन्य जानकारी अधिक सटीक हो जाती है.
  • ड्राइवरों को पॉइंट A से पॉइंट B तक पहुंचने के लिए, बारी-बारी से निर्देश मिलते हैं. इसमें रीयल-टाइम में ट्रैफ़िक और रास्ते से जुड़ी अन्य पाबंदियों को ध्यान में रखा जाता है.
  • इवेंट लिसनर और रजिस्टर किए गए कॉलबैक के ज़रिए, रूट की प्रोग्रेस, जगह, स्पीड वगैरह के आधार पर इवेंट ट्रिगर करना.

डिफ़ॉल्ट रूप से 'Play कंसोल' का नया वर्शन चुनें

जब ग्राहक Nav SDK को कार्यान्वित करते हैं, तो यह मान लिया जाता है कि उन्हें टर्न-बाय-टर्न सुविधा की आवश्यकता है. इसलिए, Nav SDK के दस्तावेज़ (Android और iOS) में, बारी-बारी से निर्देश देने की सुविधा के साथ Nav SDK को लागू करने के तरीके के बारे में निर्देश दिए गए हैं.

Android पर, ऐप्लिकेशन में टर्न-बाय-टर्न मैप रेंडर करने के लिए SupportNavigationFragment या NavigationView का इस्तेमाल किया जाता है, जबकि iOS पर यह GMSMapView होता है. ये UI तत्व आपके ऐप में इंटरैक्टिव मानचित्र और टर्न-बाय-टर्न नेविगेशन UI जोड़ते हैं.

अगले अनुभाग में, हम एंड्रॉइड और आईओएस दोनों के लिए हेडलेस नेव एसडीके कोड के साथ टर्न-बाय-टर्न सक्षम कोड के साथ डिफ़ॉल्ट नेव एसडीके की तुलना करते हैं, और आवश्यक परिवर्तनों पर प्रकाश डालते हैं.

समाधान

Android

एंड्रॉइड पर, यह जावा कोड है जो 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 वेरिएबल को UI घटक (अर्थात टॉगल) से जोड़ा जा सकता है जो तदनुसार हेडलेस को सक्षम या अक्षम करेगा.

alt_text alt_text
ऐक्टिव नेविगेशन के साथ 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 को छिपाने के असर को दिखाने के लिए है:

alt_text alt_text
इस डिवाइस पर नेविगेशन चालू है

iOS का सैंपल ऐप्लिकेशन

हेडलेस मोड में एक ही ऐप्लिकेशन

लागू करने पर विचार

हेडलेस मोड में, नेविगेशन मैप को स्क्रीन से छिपा दिया जाता है. इसलिए, सिर्फ़ स्क्रीन टाइम सेव होता है. इससे डिवाइस की बैटरी ज़्यादा देर तक चलती है. हालांकि, Nav SDK काम करता रहेगा. इसलिए, जगह की जानकारी के अपडेट और सभी इवेंट कॉलबैक सामान्य रूप से ट्रिगर होंगे. इसलिए, इस कॉन्फ़िगरेशन का इस्तेमाल करने से कोई बुरा असर नहीं पड़ता.

नतीजा

इस दस्तावेज़ में बताया गया है कि Nav SDK कितना फ़्लेक्सिबल है. साथ ही, यह भी बताया गया है कि अलग-अलग ऑपरेटिंग सिस्टम में, उनकी पाबंदियों को ध्यान में रखते हुए क्या-क्या किया जा सकता है. इससे खरीदारों को, ड्राइविंग के दौरान मिलने वाले अनुभव को अपनी पसंद के मुताबिक बनाने की सुविधा भी मिलती है. इससे उन्हें ड्राइविंग के दौरान ध्यान भटकने से बचने और सुरक्षा को बेहतर बनाने में मदद मिलती है.

अतिरिक्त संसाधन

अगर ऊपर बताई गई वजहों से, नेविगेशन के दौरान सूचनाएं बंद करनी हैं, तो ऐसा भी किया जा सकता है. इसके लिए, कृपया Nav SDK में बारी-बारी से मिलने वाली सूचनाओं में बदलाव करना लेख पढ़ें.