คำแนะนำในการย้ายข้อมูล

การเปลี่ยนแปลงที่ใหญ่ที่สุดที่ Google ทำกับ Navigation SDK สำหรับเวอร์ชัน 2 คือเราได้แทนที่คลาส Navigation SDK หลายคลาสด้วยคลาสจาก Maps SDK สำหรับ Android

ตั้งแต่เวอร์ชัน 2.2 Navigation SDK เป็นการแทนที่ Maps API ของบริการ Google Play ที่ (เกือบ) แล้ว แทนที่จะนำ API ทั้งหมดไปบรรจุใน com.google.android.libraries.maps อีกครั้ง API เหล่านี้ก็ได้รับการรวมไว้ใน com.google.android.gms.maps เหมือนกับบริการ Google Play ซึ่งทำให้การเปลี่ยนระหว่างเวอร์ชันบริการ Google Play กับ Navigation SDK นั้นง่ายขึ้นมาก

ประโยชน์

  • ใช้งานหน่วยความจำได้ดียิ่งขึ้น ตอนนี้คุณใช้หน่วยความจำและแบนด์วิดท์น้อยกว่าการใช้ทั้ง Navigation SDK และ Maps SDK สำหรับ Android
  • ตอนนี้การเปลี่ยนจากโหมดมุมมองแผนที่เป็นโหมดการนำทางจะราบรื่นขึ้นและใช้งานได้ง่ายขึ้น
  • ตอนนี้คุณควบคุมกล้องได้มากขึ้นแล้ว
  • คุณสามารถทำสิ่งต่างๆ เช่น วาดเส้นประกอบและการวางซ้อน รวมถึงเพิ่มรูปแบบที่กำหนดเองลงในแผนที่

แต่ไม่รองรับฟีเจอร์ เช่น Street View และโหมด Lite

ข้อกำหนดเบื้องต้น

  • Navigation SDK เวอร์ชัน 2 ใช้ Android Jetpack ซึ่งเป็นชุดไลบรารี เครื่องมือ และคำแนะนำที่ช่วยให้เขียนแอปคุณภาพสูงได้ง่ายขึ้น ซึ่งหมายความว่าคุณต้องย้ายข้อมูลแอปจากการใช้ไลบรารีการสนับสนุนไปใช้ AndroidX ดูข้อมูลเพิ่มเติมได้ที่การย้ายข้อมูลไปยัง AndroidX

ขั้นตอนที่ 1 ย้ายข้อมูลจาก Maps SDK สำหรับ Android

ตอนนี้ฟังก์ชันส่วนใหญ่ใน Maps SDK สำหรับ Android จะรวมอยู่ใน Navigation SDK เวอร์ชัน 2 ฟีเจอร์บางอย่างถูกนำออกเนื่องจากไม่จำเป็นต้องใช้ในบริบทการนำทาง

ความแตกต่างที่สำคัญ

Maps SDK สำหรับ Android เคยอยู่ในบริการ Google Play
ฟีเจอร์ Maps SDK สำหรับ Android ที่รวมอยู่ใน Navigation SDK เวอร์ชัน 2 อิงตาม Maps SDK เวอร์ชันใหม่สำหรับ Android และไม่ได้อยู่ในบริการ Google Play ฟีเจอร์ใหม่เหล่านี้ทำงานในเครื่องมือที่ใหม่กว่าในบริการ Google Play และมีการปรับปรุงหลายอย่าง นอกจากนี้ยังหมายความว่าแผนที่จะทำงานในกระบวนการของแอป ไม่ใช่ในกระบวนการของบริการ Google Play
มีการเปลี่ยนชื่อชั้นเรียนบางชั้น
ตารางต่อไปนี้แสดงรายการชั้นเรียนที่เปลี่ยนชื่อ การทำเช่นนี้มีจุดประสงค์เพื่อแยกความแตกต่างระหว่าง Maps SDK สำหรับ Android
ชื่อคลาส Maps SDK สำหรับ Androidชื่อคลาสการนำทาง SDK
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
คลาสเหล่านี้มีทั้งเมธอดที่มีให้ในคลาส NavigationView แบบเก่าและคลาส MapView ปัจจุบัน อาจคล้ายๆ กับคลาส MapView และ MapFragment แต่รองรับการไปยังส่วนต่างๆ
ฟีเจอร์ที่นำออก
ระบบได้นำฟีเจอร์บางอย่างของ Maps ออกเนื่องจากมีความไม่เหมาะสมในบริบทของการนำทาง หรือเนื่องจากความไม่เข้ากันทางเทคนิค ฟีเจอร์ที่นำออกมีดังนี้
  • Street View.
  • โหมด Lite ซึ่งไม่เพียงพอสำหรับการนำทาง
  • คุณตั้งค่า LocationProvider ไม่ได้เมื่อกล้องอยู่ในโหมดติดตาม เนื่องจากการนำทางอาศัย RoadSnappedLocationProvider และการเปลี่ยนไปใช้ผู้ให้บริการรายนี้อาจทำให้เกิดปัญหาเมื่อนำทางได้
  • การใช้การซูมต่ำสุด/สูงสุดและขอบเขต LatLng จะไม่มีผล เมื่อกล้องอยู่ในโหมดการติดตาม
  • โปรดติดต่อตัวแทนลูกค้าของคุณหากฟีเจอร์ที่ขาดหายไปเหล่านี้ทำให้เกิดปัญหา

ขั้นตอนการย้ายข้อมูล

  1. นำ Maps SDK สำหรับการผสานรวม Android ออกจากบิลด์ (เช่น Gradle) การมี SDK ทั้ง 2 รายการจะทำให้เกิดข้อผิดพลาดในการคอมไพล์
  2. แทนที่อินสแตนซ์ของ MapView ด้วยอินสแตนซ์ของ NavigationView
  3. แทนที่อินสแตนซ์ของ MapFragment ด้วยอินสแตนซ์ของ NavigationSupportFragment

หากก่อนหน้านี้แอปพลิเคชันของคุณไม่ได้ใช้ Navigation SDK แสดงว่าการย้ายข้อมูลเสร็จสมบูรณ์แล้ว

ขั้นตอนที่ 2 ย้ายข้อมูลจาก Navigation SDK เวอร์ชัน 1.x

ทำตามขั้นตอนต่อไปนี้เพื่อย้ายข้อมูลการผสานรวม Navigation SDK เวอร์ชัน 1.x ไปยังเวอร์ชัน 2

1. รับแผนที่โดยใช้วิธีการใหม่

วิธีเรียกดูแผนที่ได้เปลี่ยนไปแล้ว ก่อนเวอร์ชัน 2 คุณจะได้รับแผนที่โดยใช้การเรียกแบบซิงโครนัส ต่อไปคุณจะใช้การเรียกใช้แบบอะซิงโครนัส ตารางต่อไปนี้แสดงรายการวิธีการแบบเก่า รวมทั้งวิธีการใหม่ในการรับแผนที่

เมธอดเดิมวิธีการใหม่
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. ย้ายข้อมูลไลบรารี

เวอร์ชัน 1.x ของ Navigation SDK มีการติดตั้งใช้งาน Maps SDK หลายคลาสสำหรับ Android คลาสเหล่านี้อยู่ในแพ็กเกจ com.google.android.libraries.navigation

ในเวอร์ชัน 2 เราได้แทนที่คลาสเหล่านี้ด้วย Maps SDK สำหรับการติดตั้งใช้งาน Android ซึ่งอยู่ภายใต้แพ็กเกจ 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. รองรับการเปลี่ยนแปลง API ที่มีอยู่

ตารางต่อไปนี้แสดงการเปลี่ยนแปลงสำคัญที่ Google ทำสำหรับ Navigation SDK เวอร์ชัน 2

วิธีการเปลี่ยน
NavigationApi.cleanup() นำออกแล้ว วิธีนี้ไม่ได้ใช้สำหรับการดำเนินการปกติและอาจทำให้เกิดลักษณะการทำงานที่คาดเดาไม่ได้ คุณต้องนำการเรียกวิธีนี้ออก
RoadSnappedLocationProvider.requestLocationUpdates() นำออกแล้ว โปรดใช้ addLocationListener() แทน
RoadSnappedLocationProvider.stopRequestingLocationUpdates() นำออกแล้ว โปรดใช้ removeLocationListener() แทน

4. เปลี่ยนเป็นชั้นเรียนเครื่องหมายใหม่

ตอนนี้ Navigation SDK เวอร์ชัน 2 ใช้คลาส Marker เหมือนกับ Maps SDK สำหรับ Android ซึ่งทำให้มีการเปลี่ยนแปลงต่อไปนี้

วิธีการเปลี่ยน
addMarker(MarkerOptions markerOptions) ตอนนี้ใช้คลาส com.google.android.gms.maps.model.MarkerOptions
removeMarker(Marker marker) ไม่มีวิธีการนี้แล้ว แต่คลาสมาร์กเกอร์มีเมธอด marker.remove() แทน
removeAllMarkers() วิธีการนี้ไม่สามารถใช้ได้อีกต่อไป แม้ว่าจะมีวิธี clear() ที่ลบเครื่องหมาย เส้นประกอบ รูปหลายเหลี่ยม และการวางซ้อนทั้งหมดออกจากแผนที่

ความแตกต่างของตัวเลือกมาร์กเกอร์

  • ไม่มีเมธอด describeContents() ใน Navigation SDK เวอร์ชัน 2 ซึ่งช่วยให้คุณบันทึกข้อมูลการดูได้โดยการเรียกใช้ onSaveInstanceState() ในตอนนี้ คุณจะต้องติดตามรายละเอียดของมุมมองด้วยตนเองเพื่อสร้างมุมมองใหม่เมื่อมีการเปลี่ยนแปลงการกำหนดค่า
  • เมธอด navMarker#icon(BitMap) ได้เปลี่ยนเป็น mapMarker#icon(BitmapDescriptor) คุณต้องย้ายข้อมูลจาก BitMap เพื่อใช้ BitmapDescriptor จึงจะทำการเปลี่ยนแปลงนี้ได้

วิธีทำเครื่องหมาย

ตอนนี้คุณจะใช้คลาส Marker จากแพ็กเกจ com.google.android.gms.maps.model ตารางต่อไปนี้แสดงความแตกต่างในการใช้คลาส Marker ใหม่นี้

วิธีการเปลี่ยน
getAnchorU() ไม่มีแล้ว
getAnchorV() ไม่มีแล้ว
getIcon() ไม่มีอีกต่อไป
คุณต้องรักษาการอ้างอิงไปยังไอคอนด้วยตนเอง สำหรับการใช้งานหลังจากการเปลี่ยนแปลงการกำหนดค่า เมื่อต้องสร้างสถานะแผนที่อีกครั้ง
getPosition() ยังมีอยู่
getTitle() ยังมีอยู่

5. การควบคุมกล้อง

การควบคุมกล้องที่มีให้ใน Navigation SDK เวอร์ชัน 1.x มีค่อนข้างจำกัด ตอนนี้ Navigation SDK เวอร์ชัน 2 ใช้กล้องรุ่นเดียวกับที่ใช้ที่ Maps SDK สำหรับ Android ยกเว้นที่คุณจะได้รับโหมดการติดตามที่คล้ายกับใน Navigation SDK เวอร์ชัน 1.x

ความแตกต่างที่สำคัญ

  • มีการนำคลาส com.google.android.libraries.navigation.Camera ออกจากเวอร์ชัน 2
    • ย้าย Camera.showRouteOverview() ไปที่ NavigationView และ SupportNavigationFragment แล้ว
    • ย้ายเมธอด Camera.followMyLocation() ไปที่ GoogleMap แล้ว
  • คุณแทนที่การโทรไปยัง Camera.setLocation() ด้วย GoogleMap.moveCamera() หรือ GoogleMap.animateCamera() ได้
  • เพิ่ม setOnFollowMyLocationCallback() และ isCameraFollowingMyLocation() ลงใน GoogleMap เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับโหมดการติดตาม

ขั้นตอนที่ 3 รวมขั้นตอนกิจกรรม

หากก่อนหน้านี้คุณใช้ Navigation SDK เวอร์ชัน 1 และทำตามวิธีการข้างต้น คุณจะต้องย้ายข้อมูล Use Case ของแผนที่เพื่อใช้คลาส NavigationView และจะย้ายข้อมูล Use Case ของการนำทางไปใช้ GoogleMap อย่างไรก็ตาม คุณจะมี GoogleMap 2 อินสแตนซ์ และ NavigationView 2 อินสแตนซ์ ซึ่งหมายความว่าคุณจะยังคงใช้หน่วยความจำเกินกว่าที่จำเป็น และการสลับไปมาระหว่าง 2 อินสแตนซ์อาจส่งผลให้มีการหยุดชั่วคราวที่รับรู้ได้เพื่อให้การแสดงผลอินเทอร์เฟซผู้ใช้ราบรื่น ในการแก้ปัญหานี้ คุณควรผสานโฟลว์กิจกรรม/โฟลว์ของ Fragment เข้าด้วยกันเพื่อให้แชร์อินสแตนซ์เดียวกันได้ วิธีนี้จะช่วยให้ผู้ใช้ใช้งานได้อย่างราบรื่นขึ้น และทำให้แอปพลิเคชันของคุณมีประสิทธิภาพยิ่งขึ้น