Taşıma Rehberi

Google'ın v2 için Gezinme SDK'sında yaptığı en büyük değişiklik, bazı Navigasyon SDK'sı sınıflarını Android için Haritalar SDK'sı sınıflarıyla değiştirmemizdir.

2.2 sürümünden itibaren Gezinme SDK'sı, Google Play Hizmetleri Haritalar API'sinin (neredeyse) yerini alan bir uygulamadır. Tüm API'ler, com.google.android.libraries.maps içine yeniden paketlenmek yerine, tıpkı Google Play Hizmetleri gibi com.google.android.gms.maps biçiminde paketlenmiştir. Bu, Google Play Hizmetleri sürümü ile Navigasyon SDK'sı arasında geçiş yapmayı çok daha basit hale getirir.

Avantajları

  • Daha iyi bellek kullanımı. Artık hem Navigasyon SDK'sını hem de Android için Haritalar SDK'sını kullanmaya kıyasla daha az bellek ve bant genişliği kullanıyorsunuz.
  • Harita görünümü modundan navigasyon moduna geçiş artık daha sorunsuz ve daha kolay bir şekilde yapılabilir.
  • Artık kamera üzerinde daha fazla kontrole sahipsiniz.
  • Artık çoklu çizgiler ve bindirmeler çizme ve haritaya özel stiller ekleme gibi işlemler yapabilirsiniz.

Ancak, Street View ve Basit Mod gibi özellikler desteklenmez.

Ön koşullar

  • Gezinme SDK'sının 2. Sürümü Android Jetpack'i kullanır. Android Jetpack, yüksek kaliteli uygulamalar yazmayı kolaylaştıran kitaplık, araçlar ve rehberlik paketidir. Bu doğrultuda, AndroidX'i kullanmak için uygulamanızı destek kitaplıklarını kullanmaktan vazgeçmeniz gerekiyor. Daha fazla bilgi için AndroidX'e taşıma bölümüne bakın.

1. Adım: Android için Haritalar SDK'sından taşıma

Android için Haritalar SDK'sındaki işlevlerin çoğu artık Gezinme SDK'sının 2 sürümünde yer alıyor. Navigasyon bağlamında ihtiyaç duyulmadığı için birkaç özellik kaldırıldı.

Önemli farklılıklar

Android için Haritalar SDK'sı, Google Play Hizmetleri'ndeydi.
Navigasyon SDK'sının v2 ile sunulan Android için Haritalar SDK'sı özellikleri, Android için Haritalar SDK'sının yeni sürümünü temel alır ve Google Play Hizmetleri'nde yer almaz. Bu yeni özellikler, Google Play Hizmetleri'ndekinden daha yeni bir motorda çalışır ve çeşitli iyileştirmeler içerir. Bu, haritanın Google Play Hizmeti sürecinde değil, uygulamanızın işlemi içinde çalıştığı anlamına da gelir.
Bazı sınıflar yeniden adlandırıldı
Aşağıdaki tabloda, yeniden adlandırılan sınıflar listelenmiştir. Bunun amacı, Android'e yönelik Haritalar SDK'sından ayırt edilmelerini sağlamaktır.
Android için Haritalar SDK'sı Sınıf AdıGezinme SDK'sı Sınıf Adı
MapView.java NavigationView.java
MapFragment.java SupportNavigationFragment.java
Bu sınıflar, eski NavigationView ile mevcut MapView sınıfında kullanılabilen yöntemlerin bir karışımını içerir. Gezinme desteğiyle bunları MapView ve MapFragment sınıfları gibi düşünebilirsiniz.
Kaldırılan özellikler
Bazı Haritalar özellikleri, navigasyon bağlamında anlamlı olmadıkları veya teknik uyumsuzluklar nedeniyle kaldırıldı. Kaldırılan özellikler arasında şunlar bulunur:
  • Sokak Görünümü.
  • Gezinme için yeterli olmayan Basit mod.
  • Kamera Takip modu modundayken LocationProvider ayarlayamazsınız. Bunun nedeni, navigasyonun RoadSnappedLocationProvider temelli olması ve bu sağlayıcıya geçişin navigasyon sırasında sorunlara yol açabilmesidir.
  • Kamera Takip Modu modundayken Min/Maks. yakınlaştırma ve LatLng sınırlarının uygulanmasının herhangi bir etkisi olmaz.
  • Bu eksik özellikler soruna neden oluyorsa lütfen müşteri temsilcinizle görüşün.

Taşıma adımları

  1. Derlemenizden (ör. gradle) Android için Haritalar SDK'sını kaldırın. Her iki SDK'ya da sahip olmak, derleme hatalarına neden olur.
  2. MapView örneklerini NavigationView örnekleriyle değiştirin.
  3. MapFragment örneklerini NavigationSupportFragment örnekleriyle değiştirin.

Uygulamanız daha önce Navigation SDK'sını kullanmıyorsa taşıma işleminiz tamamlanmıştır.

2. adım: Gezinme SDK'sinin v1.x sürümünden taşıma

Gezinme SDK'si v1.x entegrasyonunuzu v2'ye taşımak için aşağıdaki adımları uygulayın.

1. Yeni yöntemler kullanarak haritayı alma

Harita alma şekliniz değişti. v2'den önce haritayı bir eşzamanlı çağrı kullanıyordunuz. Şimdi, eşzamansız bir çağrı kullanacaksınız. Aşağıdaki tabloda, haritayı almak için kullanılan yeni yöntemler ile eski yöntemler listelenmektedir.

Eski YöntemYeni Yöntem
NavigationView.getMap() NavigationView.getMapAsync()
SupportNavigationFragment.getMap() SupportNavigationFragment.getMapAsync()

2. Kitaplıkları taşı

Gezinme SDK'sının v1.x sürümü, Android sınıfları için çeşitli Haritalar SDK'sını kendi uygulamasını içeriyordu. Bu sınıflar com.google.android.libraries.navigation paketine aitti.

v2'de bu sınıflar, com.google.android.gms.maps.model paketinin altında yer alan Android uygulamaları için Haritalar SDK'sı ile değiştirilmiştir. Uygulamanızı, arama ve değiştirme işlemi gerçekleştirerek yeni sınıfları entegre etmek üzere taşıyabilirsiniz.

Aşağıdaki tabloda yeni sınıflarla birlikte eski sınıflar da listelenmiştir.

Eski SınıfYeni Sınıf
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. Mevcut API'lerdeki değişiklikleri kabul edin

Aşağıdaki tabloda, Google'ın Gezinme SDK'sı v2'si için yaptığı önemli değişiklikler listelenmiştir.

YöntemDeğiştir
NavigationApi.cleanup() Kaldırıldı. Bu yöntem normal çalışma için kullanılmadı ve öngörülemeyen davranışlara yol açabilirdi. Bu yönteme yapılan çağrıları kaldırmanız gerekir.
RoadSnappedLocationProvider.requestLocationUpdates() Kaldırıldı. Bunun yerine addLocationListener() politikasını kullanın.
RoadSnappedLocationProvider.stopRequestingLocationUpdates() Kaldırıldı. Bunun yerine removeLocationListener() politikasını kullanın.

4. Yeni Sayfa İşareti sınıfına geçin

Gezinme SDK'sının v2 sürümünde, artık Marker sınıfının Android için Haritalar SDK'sı ile aynı uygulaması kullanılmaktadır. Bunun sonucunda aşağıdaki değişiklikler ortaya çıkar.

YöntemDeğiştir
addMarker(MarkerOptions markerOptions) Artık com.google.android.gms.maps.model.MarkerOptions sınıfını kullanıyor.
removeMarker(Marker marker) Bu yöntem artık mevcut değil. Bunun yerine, artık İşaretçi sınıfının bir marker.remove() yöntemi bulunmaktadır.
removeAllMarkers() Tüm işaretçileri, çoklu çizgileri, poligonları ve bindirmeleri haritadan kaldıran bir clear() yöntemi olsa da bu yöntem artık mevcut değildir.

MarkerOptions farklılıkları

  • describeContents() yöntemi, Gezinme SDK'sinin v2 sürümünde yoktur. onSaveInstanceState() yöntemini çağırarak görünüm verilerini kaydetmenizi sağlıyordu. Artık görünüm ayrıntılarını sizin izlemeniz gerekir. Böylece, bir yapılandırma değişikliği olduğunda görünümü yeniden oluşturabilirsiniz.
  • navMarker#icon(BitMap) yöntemi mapMarker#icon(BitmapDescriptor) olarak değiştirildi. Bu değişiklik, BitmapDescriptor kullanmak için BitMap kullanımından geçiş yapmanızı gerektirir.

İşaretçi yöntemleri

Şimdi com.google.android.gms.maps.model paketindeki Marker sınıfını kullanacaksınız. Aşağıdaki tabloda, bu yeni Marker sınıfının kullanımıyla ilgili farklılıklar listelenmiştir.

YöntemDeğiştir
getAnchorU() Artık mevcut değil.
getAnchorV() Artık mevcut değil.
getIcon() Artık mevcut değil.
Bir yapılandırma değişikliğinden sonra harita durumunu yeniden oluşturmanız gerektiğinde kullanmak için simgenin referansını kendiniz saklamalısınız.
getPosition() Hâlâ mevcut.
getTitle() Hâlâ mevcut.

5. Kamera kontrolü

Gezinme SDK'sinin v1.x sürümünde sunulan kamera denetimleri nispeten sınırlıydı. Navigasyon SDK'sının 2. sürümünde artık Android için Haritalar SDK'sı tarafından kullanılan kamera modeli kullanılmaktadır. Bununla birlikte, Navigasyon SDK'sının v1.x sürümündekine benzer bir Takip Modu da alırsınız.

Temel farklar

  • com.google.android.libraries.navigation.Camera sınıfı v2'de kaldırıldı.
    • Camera.showRouteOverview(), NavigationView ve SupportNavigationFragment konumlarına taşındı.
    • Camera.followMyLocation() yöntemi GoogleMap hedefine taşındı.
  • Camera.setLocation() için yapılan aramaları GoogleMap.moveCamera() veya GoogleMap.animateCamera() ile değiştirebilirsiniz.
  • setOnFollowMyLocationCallback() ve isCameraFollowingMyLocation(), takip modu hakkında daha fazla bilgi sağlamak için GoogleMap öğesine eklendi.

3. adım: Etkinlik akışlarını birleştirme

Daha önce Gezinme SDK'sının V1'ini kullandıysanız ve yukarıdaki talimatları izlediyseniz harita kullanım alanlarınızı NavigationView sınıfını kullanacak şekilde, navigasyon kullanım alanlarınızı da GoogleMap kullanmak için taşımış olursunuz. Ancak iki GoogleMap ve iki NavigationView örneğiniz olacaktır. Bu durum yine de gereğinden fazla bellek kullandığınız anlamına gelir ve iki örnek arasında geçiş yapmak, kullanıcı arayüzünün sorunsuz şekilde oluşturulması sırasında algılanabilir duraklamalara yol açabilir. Bu sorunu çözmek için etkinlik/parça akışlarınızı, tek bir örneği paylaşabilecekleri şekilde birleştirmeniz gerekir. Bu, daha sorunsuz bir kullanıcı deneyimi sağlar ve uygulamanızı kolaylaştırır.