डेटा को दूसरी जगह भेजने से जुड़ी गाइड

Google ने v2 के लिए नेविगेशन SDK में जो सबसे बड़ा बदलाव किया है वह यह है कि हमने कई नेविगेशन SDK टूल को Android के लिए Maps SDK टूल से बदल दिया है.

वर्शन 2.2 के हिसाब से, नेविगेशन SDK टूल, Google Play Services Maps API का (करीब) ड्रॉप-इन है. सभी एपीआई को com.google.android.libraries.maps में रीपैकेज करने के बजाय, उन्हें Google Play Services की तरह ही com.google.android.gms.maps में पैकेज किया गया है. इससे Google Play services के वर्शन और नेविगेशन SDK टूल के बीच स्विच करना ज़्यादा आसान हो जाता है.

फ़ायदे

  • बेहतर मेमोरी इस्तेमाल. नेविगेशन SDK और Android के लिए Maps SDK टूल, दोनों का इस्तेमाल करने पर, अब कम मेमोरी और बैंडविड्थ का इस्तेमाल होता है.
  • मैप व्यू मोड से नेविगेशन मोड पर स्विच करना अब पहले से आसान और आसान है.
  • अब आपके पास कैमरे पर बेहतर कंट्रोल है.
  • अब कई काम किए जा सकते हैं, जैसे कि पॉलीलाइन बनाना और ओवरले करना. साथ ही, मैप में अपनी पसंद के मुताबिक स्टाइल जोड़ना.

हालांकि, स्ट्रीट व्यू और लाइट मोड जैसी सुविधाएं काम नहीं करतीं.

ज़रूरी शर्तें

  • नेविगेशन SDK के वर्शन 2 में Android Jetpack का इस्तेमाल किया गया है. यह लाइब्रेरी, टूल, और दिशा-निर्देशों का एक सुइट है, जिससे अच्छी क्वालिटी वाले ऐप्लिकेशन बनाने में आसानी होती है. इसका मतलब है कि आपको अपने ऐप्लिकेशन को सपोर्ट लाइब्रेरी से माइग्रेट करना होगा, ताकि AndroidX का इस्तेमाल किया जा सके. ज़्यादा जानकारी के लिए, AndroidX पर माइग्रेट करना देखें.

पहला चरण. Android के लिए Maps SDK टूल से माइग्रेट करना

Android के लिए Maps SDK में ज़्यादातर सुविधाएं अब नेविगेशन SDK के दूसरे वर्शन में शामिल हैं. कुछ सुविधाएं हटा दी गई हैं, क्योंकि वे नेविगेशन के लिए ज़रूरी नहीं थे.

अहम अंतर

Android के लिए Maps SDK टूल, Google Play Services में था.
नेविगेशन SDK टूल के v2 में बंडल की गई 'Android के लिए Maps SDK' की सुविधाएं, Android के लिए Maps SDK के नए वर्शन पर आधारित हैं. साथ ही, ये Google Play Services में मौजूद नहीं हैं. ये नई सुविधाएं, Google Play services के बजाय नए इंजन पर चलती हैं. साथ ही, इनमें कई सुधार किए गए हैं. इसका मतलब यह भी है कि मैप आपके ऐप्लिकेशन की प्रोसेस में चलता है, न कि Google Play की सेवा की प्रोसेस में.
कुछ क्लास के नाम बदले गए
नीचे दी गई टेबल में उन क्लास की सूची दी गई है जिनका नाम बदला गया है. ऐसा उन्हें Android के लिए, Maps SDK टूल से अलग करने के लिए किया गया था.
Android क्लास के नाम के लिए Maps SDK टूलनेविगेशन SDK टूल की क्लास का नाम
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
इन क्लास में, पुरानी NavigationView क्लास और मौजूदा MapView क्लास में उपलब्ध तरीके शामिल होते हैं. आपके पास MapView और MapFragment क्लास की तरह ही नेविगेशन का विकल्प है.
हटाई गई सुविधाएं
Maps की कुछ सुविधाएं हटा दी गई हैं, क्योंकि नेविगेशन में इन्हें समझने का कोई मतलब नहीं था या इनमें तकनीकी समस्याएं थीं. हटाई गई सुविधाओं में ये शामिल हैं:
  • स्ट्रीट व्यू.
  • लाइट मोड, जो नेविगेशन के लिए काफ़ी नहीं है.
  • कैमरा फ़ॉलो करें मोड में होने पर, LocationProvider सेट नहीं किया जा सकता. इसकी वजह यह है कि नेविगेशन के लिए, RoadSnappedLocationProvider का इस्तेमाल किया जाता है. इस कंपनी पर स्विच करने से, नेविगेट करते समय समस्या हो सकती है.
  • कैमरा, 'फ़ॉलो करें' मोड में होने पर, कम से कम/ज़्यादा से ज़्यादा ज़ूम और LatLng सीमा लागू करने से कोई असर नहीं पड़ेगा.
  • अगर इन सुविधाओं के उपलब्ध न होने की वजह से आपको कोई परेशानी हो रही है, तो कृपया अपने ग्राहक प्रतिनिधि से संपर्क करें.

माइग्रेशन का तरीका

  1. अपने बिल्ड (जैसे कि Gradle) से, Android इंटिग्रेशन के लिए Maps SDK टूल हटाएं. दोनों SDK टूल होने से, कंपाइलेशन गड़बड़ियां होंगी.
  2. MapView के इंस्टेंस को NavigationView के इंस्टेंस से बदलें.
  3. MapFragment के इंस्टेंस को NavigationSupportFragment के इंस्टेंस से बदलें.

अगर आपका ऐप्लिकेशन पहले नेविगेशन SDK टूल का इस्तेमाल नहीं कर रहा था, तो आपका माइग्रेशन पूरा हो गया है.

दूसरा चरण. नेविगेशन SDK के v1.x से माइग्रेट करें

नेविगेशन SDK टूल के अपने v1.x इंटिग्रेशन को v2 पर माइग्रेट करने के लिए, यह तरीका अपनाएं.

1. नए तरीकों का इस्तेमाल करके मैप पाएं

मैप पाने का तरीका बदल गया है. वर्शन 2 से पहले, आपको सिंक्रोनस कॉल इस्तेमाल करके मैप मिलता था. अब, आप एसिंक्रोनस कॉल का इस्तेमाल करेंगे. नीचे दी गई टेबल में, पुराने और मैप पाने के नए तरीकों की सूची दी गई है.

पुराना तरीकानया तरीका
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. लाइब्रेरी माइग्रेट करें

नेविगेशन SDK के v1.x में, Android क्लास के लिए कई Maps SDK टूल को लागू किया गया है. ये क्लास com.google.android.libraries.navigation पैकेज की थीं.

वर्शन 2 में, इन क्लास को Android पर लागू करने के लिए Maps SDK टूल से बदल दिया गया है, जो com.google.android.gms.maps.model पैकेज के तहत है. नई क्लास को इंटिग्रेट करने के लिए, अपने ऐप्लिकेशन को माइग्रेट किया जा सकता है. ऐसा करने के लिए, आपको क्लास में बदलाव करना होगा.

इस टेबल में पुरानी क्लास के साथ-साथ नई क्लास की सूची दी गई है.

पुरानी क्लासनई क्लास
com.google.android.libraries.navigation.LatLng com.google.android.gms.maps.model.LatLng
com.google.android.libraries.navigation.LatLngBounds com.google.android.gms.maps.model.LatLngBounds
com.google.android.libraries.navigation.Marker com.google.android.gms.maps.model.Marker
com.google.android.libraries.navigation.MarkerOptions com.google.android.gms.maps.model.MarkerOptions
com.google.android.libraries.navigation.VisibleRegion com.google.android.gms.maps.model.VisibleRegion

3. मौजूदा एपीआई में बदलाव लागू करें

नीचे दी गई टेबल में, नेविगेशन SDK टूल के वर्शन 2 में हुए अहम बदलावों की जानकारी दी गई है.

तरीकाबदलें
NavigationApi.cleanup() हटाया गया. इस तरीके का इस्तेमाल, सामान्य कार्रवाई के लिए नहीं किया गया था. इस वजह से, उम्मीद के मुताबिक व्यवहार नहीं किया जा सकता था. आपको इस तरीके के लिए कॉल हटाने होंगे.
RoadSnappedLocationProvider.requestLocationUpdates() हटाया गया. इसके बजाय, addLocationListener() का इस्तेमाल करें.
RoadSnappedLocationProvider.stopRequestingLocationUpdates() हटाया गया. इसके बजाय, removeLocationListener() का इस्तेमाल करें.

4. नई मार्कर क्लास में बदलें

नेविगेशन SDK के वर्शन 2 में, अब Marker क्लास को लागू करने के उसी तरीके का इस्तेमाल किया जाता है जिसका इस्तेमाल Android के लिए Maps SDK टूल के लिए किया जाता है. ऐसा करने पर, नीचे दिए गए बदलावों के बारे में पता चल जाएगा.

तरीकाबदलें
addMarker(MarkerOptions markerOptions) अब com.google.android.gms.maps.model.MarkerOptions क्लास का इस्तेमाल किया जाता है.
removeMarker(Marker marker) यह तरीका अब मौजूद नहीं है. इसके बजाय, मार्कर क्लास में अब एक marker.remove() तरीका है.
removeAllMarkers() यह तरीका अब मौजूद नहीं है. हालांकि, clear() वाला एक तरीका है जो मैप से सभी मार्कर, पॉलीलाइन, पॉलीगॉन, और ओवरले को हटा देता है.

मार्कर विकल्प में अंतर

  • नेविगेशन SDK टूल के वर्शन 2 में, describeContents() तरीका मौजूद नहीं है. इसकी मदद से, onSaveInstanceState() को कॉल करके व्यू डेटा को सेव किया जा सकता है. अब आपको व्यू की जानकारी खुद ट्रैक करनी होगी, ताकि कॉन्फ़िगरेशन में बदलाव होने पर व्यू को फिर से बनाया जा सके.
  • navMarker#icon(BitMap) तरीके को बदलकर mapMarker#icon(BitmapDescriptor) कर दिया गया है. इस बदलाव के लिए ज़रूरी है कि आप BitMap की जगह, BitmapDescriptor का इस्तेमाल करें.

मार्कर के तरीके

अब आपके पास com.google.android.gms.maps.model पैकेज में मौजूद Marker क्लास का इस्तेमाल करने का विकल्प है. इस टेबल में, Marker क्लास के इस्तेमाल को लेकर अंतर बताए गए हैं.

तरीकाबदलें
getAnchorU() अब मौजूद नहीं है.
getAnchorV() अब मौजूद नहीं है.
getIcon() अब मौजूद नहीं है.
आपको मैप की स्थिति को फिर से बनाने की ज़रूरत होने पर, खुद ही आइकॉन का रेफ़रंस देना होगा, ताकि कॉन्फ़िगरेशन में बदलाव होने के बाद उसका इस्तेमाल किया जा सके.
getPosition() अब भी मौजूद है.
getTitle() अब भी मौजूद है.

5. कैमरे का कंट्रोल

नेविगेशन SDK के v1.x में दिए गए कैमरा कंट्रोल सीमित थे. नेविगेशन SDK का वर्शन 2, अब उसी कैमरा मॉडल का इस्तेमाल करता है जिसका इस्तेमाल Android के लिए Maps SDK टूल में किया जाता है. हालांकि, आपको नेविगेशन SDK के v1.x से मिलता-जुलता फ़ॉलो मोड भी मिलता है.

मुख्य अंतर

  • वर्शन 2 से com.google.android.libraries.navigation.Camera क्लास को हटा दिया गया था.
    • Camera.showRouteOverview() को NavigationView और SupportNavigationFragment में ले जाया गया.
    • Camera.followMyLocation() तरीके को GoogleMap में ले जाया गया.
  • Camera.setLocation() के लिए किए गए कॉल को GoogleMap.moveCamera() या GoogleMap.animateCamera() से बदला जा सकता है.
  • setOnFollowMyLocationCallback() और isCameraFollowingMyLocation() को GoogleMap में जोड़ा गया, ताकि फ़ॉलो मोड के बारे में ज़्यादा जानकारी दी जा सके.

तीसरा चरण. गतिविधि फ़्लो मर्ज करें

अगर पहले नेविगेशन SDK के V1 का इस्तेमाल किया जा रहा था और ऊपर दिए गए निर्देशों का पालन किया गया था, तो आपने NavigationView क्लास का इस्तेमाल करने के लिए, अपने मैप के इस्तेमाल के उदाहरणों को माइग्रेट कर दिया होगा. साथ ही, GoogleMap का इस्तेमाल करने के लिए, नेविगेशन के इस्तेमाल के उदाहरणों को माइग्रेट कर दिया होगा. हालांकि, आपको GoogleMap के दो और NavigationView के दो इंस्टेंस मिलेंगे. इसका मतलब है कि अब भी ज़रूरत से ज़्यादा मेमोरी का इस्तेमाल किया जा रहा होगा. साथ ही, दो इंस्टेंस के बीच स्विच करने से यूज़र इंटरफ़ेस की रेंडरिंग रुक सकती है. इस समस्या को हल करने के लिए, आपको अपने गतिविधि/फ़्रैगमेंट फ़्लो को मर्ज करना होगा, ताकि वे एक ही इंस्टेंस शेयर कर सकें. इससे उपयोगकर्ताओं को बेहतर अनुभव मिलता है और आपके ऐप्लिकेशन को काम करने में आसानी होती है.