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
NavigationView
ile mevcutMapView
sınıfında kullanılabilen yöntemlerin bir karışımını içerir. Gezinme desteğiyle bunlarıMapView
veMapFragment
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, navigasyonunRoadSnappedLocationProvider
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ı
- 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.
MapView
örnekleriniNavigationView
örnekleriyle değiştirin.MapFragment
örnekleriniNavigationSupportFragment
ö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öntem | Yeni 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ıf | Yeni 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öntem | Değ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.
İşaretçiyle ilgili yöntemler
Yöntem | Değ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öntemimapMarker#icon(BitmapDescriptor)
olarak değiştirildi. Bu değişiklik,BitmapDescriptor
kullanmak içinBitMap
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öntem | Değ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
veSupportNavigationFragment
konumlarına taşındı.Camera.followMyLocation()
yöntemiGoogleMap
hedefine taşındı.
Camera.setLocation()
için yapılan aramalarıGoogleMap.moveCamera()
veyaGoogleMap.animateCamera()
ile değiştirebilirsiniz.setOnFollowMyLocationCallback()
veisCameraFollowingMyLocation()
, takip modu hakkında daha fazla bilgi sağlamak içinGoogleMap
öğ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.