1. Hoş geldiniz
Bu codelab, Google Developers Training ekibi tarafından geliştirilen Advanced Android Development eğitim kursunun bir parçasıdır. Bu kurstan en iyi şekilde yararlanmak için codelab'leri sırayla tamamlamanız önerilir.
Kursla ilgili tüm ayrıntılar için İleri Düzey Android Geliştirme'ye genel bakış başlıklı makaleyi inceleyin.
Giriş
Google Haritalar ile uygulama geliştirerek uygulamanıza uydu görüntüleri, güçlü kullanıcı arayüzü kontrolleri, konum takibi ve konum işaretçileri gibi özellikler ekleyebilirsiniz. Kendi veri kümenizdeki bilgileri (ör. iyi bilinen balık tutma veya tırmanma alanlarının konumları) göstererek standart Google Haritalar'a değer katabilirsiniz. Ayrıca, Pokémon Go gibi gerçek dünyayla bağlantılı oyunlar da oluşturabilirsiniz.
Bu uygulamalı derste Wander adlı bir Google Haritalar uygulaması oluşturacaksınız.
Bilmeniz gerekenler
Aşağıdaki konular hakkında bilgi sahibi olmanız gerekir:
- Google Haritalar'ın temel işlevleri
- Çalışma zamanında istenen izinler.
- Android Studio'da uygulama oluşturma, geliştirme ve çalıştırma
build.gradledosyanıza harici kitaplıklar ekleme
Neler öğreneceksiniz?
- Uygulamanıza Google Haritası entegre edin.
- Farklı harita türlerini görüntüleyin.
- Google Haritası'nı stilize edin.
- Haritanıza işaretçi ekleyin.
- Kullanıcının önemli bir yere (ÖY) işaretçi yerleştirmesine olanak tanır.
- Konum izlemeyi etkinleştirin.
- Google Street View'u etkinleştirin.
Yapacaklarınız
- Google API Konsolu'ndan bir API anahtarı alın ve anahtarı uygulamanıza kaydedin.
- Yerleştirilmiş bir Google Haritası içeren
Wanderuygulamasını oluşturun. - Uygulamanıza işaretçiler, stil ve konum izleme gibi özel özellikler ekleyin.
- Uygulamanızda konum izlemeyi ve Street View'u etkinleştirin.
2. Uygulamaya genel bakış
Bu uygulamalı çalışmada, stilize edilmiş bir Google Haritası olan Wander uygulamasını oluşturacaksınız. Wander uygulamasıyla konumlara işaretçi bırakabilir, konumunuzu anlık olarak görebilir ve Street View panoramalarına bakabilirsiniz.
|
|
3. 1. görev: Projeyi ayarlama ve API anahtarı alma
Google Maps API (ör. Places API) için API anahtarı gerekir. API anahtarını almak için projenizi Google API Konsolu'na kaydedersiniz. API anahtarı, uygulamayı yazarına bağlayan bir dijital sertifikaya bağlıdır. Dijital sertifikaları kullanma ve uygulamanızı imzalama hakkında daha fazla bilgi için Sign Your App (Uygulamanızı İmzalama) başlıklı makaleyi inceleyin.
Bu uygulamada, hata ayıklama sertifikasının API anahtarını kullanırsınız. Hata ayıklama sertifikası, Hata ayıklama derlemenizi imzalama bölümünde açıklandığı gibi tasarım gereği güvenli değildir. Google Haritalar API'sini kullanan yayınlanmış Android uygulamaları için ikinci bir API anahtarı gerekir: sürüm sertifikasının anahtarı. Yayın sertifikası alma hakkında daha fazla bilgi için API anahtarı alma başlıklı makaleyi inceleyin.
Android Studio'da, faydalı şablon kodu oluşturan bir Google Haritalar Etkinliği şablonu bulunur. Şablon kodu, API anahtarı almayı kolaylaştıran bir bağlantı içeren google_maps_api.xml dosyası içerir.
1.1 Haritalar şablonuyla Wander projesini oluşturma
- Yeni bir Android Studio projesi oluşturun.
- Yeni uygulamaya "Wander" adını verin. Etkinlik Ekle sayfasına ulaşana kadar varsayılan ayarları kabul edin.
- Google Haritalar Etkinliği şablonunu seçin.
- Varsayılan Etkinlik Adı ve Düzen Adı'nı değiştirmeyin.
- Başlık'ı "Wander" olarak değiştirin ve Bitir'i tıklayın.
Android Studio, haritalarla ilgili çeşitli ek dosyalar oluşturur:
google_maps_api**.xml**
API anahtarınızı tutmak için bu yapılandırma dosyasını kullanırsınız. Şablon, biri hata ayıklama ve diğeri yayın için olmak üzere iki google_maps_api.xml dosyası oluşturur. Hata ayıklama sertifikasının API anahtarı dosyası src/debug/res/values konumunda bulunur. Yayın sertifikasının API anahtarı dosyası src/release/res/values konumunda bulunur. Bu uygulamada yalnızca hata ayıklama sertifikası kullanılır.
activity_maps.xml
Bu düzen dosyası, ekranın tamamını dolduran tek bir parça içerir. SupportMapFragment sınıfı, Fragment sınıfının bir alt sınıfıdır. Ek bir özellik ile birlikte herhangi bir ViewGroup içinde <fragment> etiketi kullanarak bir düzen dosyasına SupportMapFragment ekleyebilirsiniz:
android:name="com.google.android.gms.maps.SupportMapFragment"
MapsActivity.java
MapsActivity.java dosyası, SupportMapFragment sınıfını başlatır ve Google Harita'yı hazırlamak için sınıfın getMapAsync() yöntemini kullanır. SupportMapFragment öğesini içeren etkinlik, OnMapReadyCallback arayüzünü ve bu arayüzün onMapReady() yöntemini uygulamalıdır. getMapAsync() yöntemi, haritanın yüklendiğini belirten bir GoogleMap nesnesi döndürür.
1.2 API anahtarını alma
google_maps_api.xmldosyasının hata ayıklama sürümünü açın.
Dosyada uzun bir URL içeren yorum var. URL'nin parametreleri, uygulamanızla ilgili belirli bilgileri içerir.
- URL'yi kopyalayıp bir tarayıcıya yapıştırın.
- Google API Konsolu'nda proje oluşturmak için istemleri uygulayın. Sağlanan URL'deki parametreler nedeniyle API Konsolu, Google Haritalar Android API'yi otomatik olarak etkinleştireceğini bilir.
- Bir API anahtarı oluşturun ve anahtarın kullanımını Android uygulamalarıyla kısıtlamak için Anahtarı Kısıtla'yı tıklayın. Oluşturulan API anahtarı
AIzaile başlamalıdır. google_maps_api.xmldosyasında, anahtarıYOUR_KEY_HEREyazangoogle_maps_keydizesine yapıştırın.- Uygulamanızı çalıştırın. Etkinliğinizde, Avustralya'nın Sidney şehrinde işaretçi ayarlanmış bir yerleştirilmiş harita var. (Sydney işaretçisi şablonun bir parçasıdır ve daha sonra değiştirebilirsiniz.)
4. 2. görev: Harita türleri ve işaretçiler ekleme
Google Haritalar'da normal, karma, uydu, arazi ve "yok" olmak üzere çeşitli harita türleri bulunur. Bu görevde, kullanıcının harita türünü değiştirmesine olanak tanıyan bir seçenekler menüsü içeren bir uygulama çubuğu ekleyeceksiniz. Haritanın başlangıç konumunu kendi evinizin konumuna taşırsınız. Ardından, haritada tek konumları gösteren ve etiket içerebilen işaretçiler için destek eklersiniz.
2.1 Harita türü ekleme
Kullanıcınızın istediği harita türü, ihtiyaç duyduğu bilgi türüne bağlıdır. Aracınızda navigasyon için haritaları kullanırken sokak adlarını net bir şekilde görmek faydalıdır. Yürüyüş yaparken muhtemelen dağın tepesine ulaşmak için ne kadar tırmanmanız gerektiğiyle daha çok ilgilenirsiniz. Bu adımda, kullanıcının harita türünü değiştirmesine olanak tanıyan bir seçenekler menüsü içeren bir uygulama çubuğu ekleyeceksiniz.
- Yeni bir menü XML dosyası oluşturmak için
resdizininizi sağ tıklayın ve Yeni > Android Kaynak Dosyası'nı seçin. - İletişim kutusunda dosyaya ad verin
map_options. Kaynak türü olarak Menü'yü seçin. Tamam'ı tıklayın. - Harita seçeneklerini oluşturmak için yeni dosyadaki kodu aşağıdaki kodla değiştirin. "Hiçbiri" sonuçta harita olmamasıyla sonuçlandığı için "hiçbiri" harita türü atlanır.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/normal_map"
android:title="@string/normal_map"
app:showAsAction="never"/>
<item android:id="@+id/hybrid_map"
android:title="@string/hybrid_map"
app:showAsAction="never"/>
<item android:id="@+id/satellite_map"
android:title="@string/satellite_map"
app:showAsAction="never"/>
<item android:id="@+id/terrain_map"
android:title="@string/terrain_map"
app:showAsAction="never"/>
</menu>
titleözellikleri için dize kaynakları oluşturun.MapsActivitydosyasında,FragmentActivitysınıfını genişletmek yerineAppCompatActivitysınıfını genişletecek şekilde sınıfı değiştirin.AppCompatActivitytuşunu kullandığınızda uygulama çubuğu ve dolayısıyla menü gösterilir.MapsActivityiçindeonCreateOptionsMenu()yöntemini geçersiz kılın vemap_optionsdosyasını ayrıştırın:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.map_options, menu);
return true;
}
- Harita türünü değiştirmek için
GoogleMapnesnesindesetMapType() yöntemini kullanın ve harita türü sabitlerinden birini iletin.
onOptionsItemSelected() yöntemini geçersiz kılın. Kullanıcı bir menü seçeneğini belirlediğinde harita türünü değiştirmek için aşağıdaki kodu yapıştırın:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Change the map type based on the user's selection.
switch (item.getItemId()) {
case R.id.normal_map:
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
return true;
case R.id.hybrid_map:
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
return true;
case R.id.satellite_map:
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
return true;
case R.id.terrain_map:
mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
- Uygulamayı çalıştırın. Harita türünü değiştirmek için uygulama çubuğundaki menüyü kullanın. Haritanın görünümünün nasıl değiştiğine dikkat edin.
2.2 Varsayılan harita konumunu taşıma
Varsayılan olarak onMapReady() geri çağırma işlevi, Google Haritalar'ın oluşturulduğu yer olan Sidney, Avustralya'ya bir işaretçi yerleştiren kodu içerir. Varsayılan geri çağırma, haritayı Sidney'e kaydıracak şekilde animasyon da yapar. Bu adımda, haritayı işaretçi yerleştirmeden evinizin konumuna kaydırır, ardından belirttiğiniz düzeye yakınlaştırırsınız.
onMapReady()yönteminde, işaretçiyi Sidney'e yerleştiren ve kamerayı hareket ettiren kodu kaldırın.- Tarayıcınızda www.google.com/maps adresine gidip evinizi bulun.
- Konumu sağ tıklayın ve Burada ne var? seçeneğini belirleyin.
Ekranın alt kısmına yakın bir yerde, enlem ve boylam bilgileri de dahil olmak üzere konum bilgilerinin yer aldığı küçük bir pencere açılır.
homeadlı yeni birLatLngnesnesi oluşturun.LatLngnesnesinde, tarayıcıda Google Haritalar'dan bulduğunuz koordinatları kullanın.floatadlı birzoomdeğişkeni oluşturun ve değişkeni istediğiniz ilk yakınlaştırma seviyesine ayarlayın. Aşağıdaki listede, her yakınlaştırma düzeyinde gösterilen ayrıntı düzeyi hakkında bilgi verilmektedir:
1: Dünya5: Karalar/kıta10: Şehir15: Sokaklar20: Binalar
CameraUpdatenesnesi oluşturmak içinCameraUpdateFactory.newLatLngZoom()kullanın,LatLngnesnenizi vezoomdeğişkeninizi iletin.GoogleMapnesnesindemoveCamera()işlevini çağırarak ve yeniCameraUpdatenesnesini ileterek kamerayı kaydırın ve yakınlaştırın:
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(home, zoom));
- Uygulamayı çalıştırın. Harita, evinizin bulunduğu yere kaydırılmalı ve istenen düzeye yakınlaştırılmalıdır.
2.3 Harita işaretçileri ekleme
Google Haritalar, Marker sınıfını kullanarak oluşturduğunuz bir işaretçiyle konumu belirleyebilir. Varsayılan işaretçi, standart Google Haritalar simgesini kullanır: 
İçeriğe dayalı bilgileri bilgi pencerelerinde göstermek için işaretçileri genişletebilirsiniz.
Bu adımda, kullanıcı haritada bir konuma dokunup basılı tuttuğunda işaretçi ekliyorsunuz. Ardından, işaretçiye dokunulduğunda işaretçinin koordinatlarını gösteren bir InfoWindow eklersiniz.

MapsActivityiçindesetMapLongClick()adlı bir yöntem saplaması oluşturun. Bu yöntem, bağımsız değişken olarakfinalGoogleMapalır vevoiddöndürür:
private void setMapLongClick(final GoogleMap map) {}
- Kullanıcının dokunup basılı tuttuğu yere işaretçi yerleştirmek için
GoogleMapnesnesininsetOnMapLongClickListener()yöntemini kullanın.onMapLongClick()yöntemini geçersiz kılan yeni birOnMapLongClickListenerörneği iletin. Gelen bağımsız değişken, kullanıcının bastığı konumun koordinatlarını içeren birLatLngnesnesidir:
private void setMapLongClick(final GoogleMap map) {
map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
}
});
}
onMapLongClick()içindeaddMarker()yöntemini çağırın. Konumu, iletilenLatLngolarak ayarlanmış yeni birMarkerOptionsnesnesi iletin:
map.addMarker(new MarkerOptions().position(latLng));
onMapReady()yönteminin sonundasetMapLongClick()çağrısı.mMapuygulamasında kart geçişi.- Uygulamayı çalıştırın. Haritada bir yere dokunup basılı tutarak işaretçi yerleştirin.
- İşaretçiye dokunarak ekranın ortasına getirin.
Ekranın sol alt kısmında gezinme düğmeleri gösterilir. Bu düğmeler sayesinde kullanıcı, işaretli konuma gitmek için Google Haritalar uygulamasını kullanabilir.
İşaretçi için bilgi penceresi eklemek üzere:
MarkerOptionsnesnesindetitlealanını vesnippetalanını ayarlayın.onMapLongClick()bölümünde,titlealanını "Sabitlenmiş nokta" olarak ayarlayın.snippetalanınıaddMarker()yöntemindeki konum koordinatlarına ayarlayın.
map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
String snippet = String.format(Locale.getDefault(),
"Lat: %1$.5f, Long: %2$.5f",
latLng.latitude,
latLng.longitude);
map.addMarker(new MarkerOptions()
.position(latLng)
.title(getString(R.string.dropped_pin))
.snippet(snippet));
}
});
- Uygulamayı çalıştırın. Konum işaretçisi bırakmak için haritaya dokunup basılı tutun. Bilgi penceresini göstermek için işaretçiye dokunun.
2.4 ÖY dinleyicisi ekleme
Varsayılan olarak, ilgi alanları (İA'lar) haritada ilgili simgeleriyle birlikte görünür. Önemli yerler arasında parklar, okullar, devlet binaları ve daha fazlası yer alır. Harita türü normal olarak ayarlandığında işletme ÖY'leri de haritada görünür. İşletme ÖY'leri, mağaza, restoran ve otel gibi işletmeleri temsil eder.
Bu adımda, haritaya GoogleMap.OnPoiClickListener ekleyeceksiniz. Bu tıklama dinleyicisi, dokunup basılı tutma işleminin tamamlanmasını beklemek yerine haritaya hemen bir işaretçi yerleştirir. Tıklama dinleyicisi, ÖY adını içeren bilgi penceresini de gösterir.

MapsActivityiçindesetPoiClick()adlı bir yöntem saplaması oluşturun. Bu yöntem, bağımsız değişken olarakfinalGoogleMapalır vevoiddöndürür:
private void setPoiClick(final GoogleMap map) {}
setPoiClick()yönteminde, iletilenGoogleMapüzerinde birOnPoiClickListenerayarlayın:
map.setOnPoiClickListener(new GoogleMap.OnPoiClickListener() {
@Override
public void onPoiClick(PointOfInterest poi) {
}
});
onPoiClick()yönteminde, ÖY konumuna bir işaretçi yerleştirin. Başlığı, ÖY'nin adı olarak ayarlayın. SonucupoiMarkeradlı bir değişkene kaydedin.
public void onPoiClick(PointOfInterest poi) {
Marker poiMarker = mMap.addMarker(new MarkerOptions()
.position(poi.latLng)
.title(poi.name);
}
- Bilgi penceresini hemen göstermek için
poiMarkerüzerindeshowInfoWindow()işlevini çağırın.
poiMarker.showInfoWindow();
onMapReady()sonundasetPoiClick()'ı arayın.mMapuygulamasında kart geçişi.- Uygulamanızı çalıştırın ve park gibi bir ÖY bulun. Üzerine işaretçi yerleştirmek ve ÖY'nin adını bilgi penceresinde göstermek için ÖY'ye dokunun.
5. 3. görev: Haritanızın stilini ayarlama
Google Haritalar'ı birçok şekilde özelleştirerek haritanıza benzersiz bir görünüm ve tarz katabilirsiniz.
Diğer tüm parçaları özelleştirdiğiniz gibi, kullanılabilir XML özelliklerini kullanarak MapFragment nesnesini özelleştirebilirsiniz. Ancak bu adımda, GoogleMap nesnesindeki yöntemleri kullanarak MapFragment içeriğinin görünümünü ve tarzını özelleştirirsiniz. Haritanıza stil eklemek ve işaretçilerinizi özelleştirmek için online Stil Sihirbazı'nı kullanırsınız. Ayrıca, ev konumunuza haritayla birlikte ölçeklenen ve dönen bir GroundOverlay ekleyebilirsiniz.
3.1 Haritanıza stil ekleme
Haritanız için özelleştirilmiş bir stil oluşturmak üzere, haritadaki özelliklerin nasıl görüntüleneceğini belirten bir JSON dosyası oluşturursunuz.Bu JSON dosyasını manuel olarak oluşturmanız gerekmez: Google, haritanızı görsel olarak stillendirdikten sonra JSON'u sizin için oluşturan Stil Sihirbazı'nı sağlar. Bu uygulamada, haritayı "gece modu" için şekillendiriyorsunuz. Bu, haritanın gece kullanılmak üzere soluk renkler ve düşük kontrast kullandığı anlamına gelir.
- Tarayıcınızda https://mapstyle.withgoogle.com/ adresine gidin.
- Stil Oluştur'u seçin.
- Gece temasını seçin.
- Menünün alt kısmında Diğer Seçenekler'i tıklayın.
- Özellik türü listesinin alt kısmında Su > Doldur'u seçin. Suyun rengini koyu mavi olarak değiştirin (örneğin, #160064).
- Son'u tıklayın. Sonuç olarak açılan pop-up penceredeki JSON kodunu kopyalayın.
- Android Studio'da,
resdizininderawadlı bir kaynak dizini oluşturun.res/rawiçindemap_style.jsonadlı bir dosya oluştur. - JSON kodunu yeni kaynak dosyasına yapıştırın.
- JSON stilini haritaya ayarlamak için
GoogleMapnesnesindesetMapStyle()işlevini çağırın. JSON dosyasını yükleyen birMapStyleOptionsnesnesi iletin.setMapStyle()yöntemi, stil oluşturmanın başarılı olup olmadığını gösteren bir boole değeri döndürür. Dosya yüklenemezse yöntem birResources.NotFoundExceptionoluşturur.
Haritaya stil uygulamak için aşağıdaki kodu onMapReady() yöntemine kopyalayın. Günlük ifadeleriniz için bir TAG dizesi oluşturmanız gerekebilir:
try {
// Customize the styling of the base map using a JSON object defined
// in a raw resource file.
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this, R.raw.map_style));
if (!success) {
Log.e(TAG, "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e(TAG, "Can't find style. Error: ", e);
}
- Uygulamanızı çalıştırın. Harita
normalmodundayken yeni stil görünür olmalıdır.

3.2 İşaretçinizi biçimlendirme
Harita işaretçilerine stil vererek haritanızı daha da kişiselleştirebilirsiniz. Bu adımda, varsayılan kırmızı işaretçileri gece modu renk şemasına uyacak şekilde değiştirirsiniz.
onMapLongClick()yönteminde, varsayılan işaretçiyi kullanmak ancak rengini mavi olarak değiştirmek içinMarkerOptions()oluşturucusuna aşağıdaki kod satırını ekleyin:
.icon(BitmapDescriptorFactory.defaultMarker
(BitmapDescriptorFactory.HUE_BLUE))
- Uygulamayı çalıştırın. Yerleştirdiğiniz işaretçiler artık uygulamanın gece modu temasıyla daha tutarlı olan mavi renkte gölgelendirilir.
onPoiClick() yöntemine stil eklemediğiniz için ÖY işaretçilerinin hâlâ kırmızı olduğunu unutmayın.
3.3 Yer paylaşımı ekleme
Google Harita'yı özelleştirmenin bir yolu, haritanın üzerine çizim yapmaktır. Bu teknik, popüler balık tutma yerleri gibi belirli bir konum türünü vurgulamak istediğinizde kullanışlıdır. Üç tür yer paylaşımı desteklenir:
- Şekiller: Haritaya çoklu çizgiler, poligonlar ve daireler ekleyebilirsiniz.
TileOverlaynesneleri: Karo yer paylaşımı, temel harita karolarının üzerine eklenen bir dizi görüntüyü tanımlar. Döşeme yer paylaşımları, haritaya kapsamlı görüntüler eklemek istediğinizde kullanışlıdır. Tipik bir döşeme yerleşimi, geniş bir coğrafi alanı kapsar.GroundOverlaynesneleri: Zemin yer paylaşımı, haritaya sabitlenmiş bir resimdir. Yer paylaşımları, işaretçilerden farklı olarak ekrana değil, Dünya yüzeyine yönlendirilir. Haritayı döndürme, eğme veya yakınlaştırma, görüntünün yönünü değiştirir. Yer paylaşımları, tek bir görüntüyü haritada belirli bir alana sabitlemek istediğinizde kullanışlıdır.
Bu adımda, evinizin bulunduğu konuma Android şeklinde bir yer paylaşımı ekleyeceksiniz.
- Bu Android görüntüsünü indirip
res/drawableklasörünüze kaydedin. onMapReady()içinde, kamerayı başlangıç konumuna taşıma çağrısından sonra birGroundOverlayOptionsnesnesi oluşturun. NesneyihomeOverlayadlı bir değişkene atayın:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions();
- Yukarıdaki resimden
BitmapDescriptornesnesi oluşturmak içinBitmapDescriptorFactory.fromResource()yöntemini kullanın. NesneyiGroundOverlayOptionsnesnesininimage()yöntemine iletin:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(R.drawable.android));
position()yöntemini çağırarakGroundOverlayOptionsnesnesi içinpositionözelliğini ayarlayın.homeLatLngnesnesini ve istenen yer paylaşımının metre cinsinden genişliği için birfloatiletin. Bu örnekte 100 m genişlik iyi sonuç verir:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(R.drawable.android))
.position(home, 100);
GoogleMapnesnesindeaddGroundOverlay()işlevini çağırın.GroundOverlayOptionsnesnenizi iletin:
mMap.addGroundOverlay(homeOverlay);
- Uygulamayı çalıştırın. Evinizin konumuna yakınlaştırdığınızda Android resmini yer paylaşımı olarak görürsünüz.
6. 4. görev: Konum izlemeyi ve Street View'u etkinleştirme
Kullanıcılar genellikle mevcut konumlarını görmek için Google Haritalar'ı kullanır. Konum Hizmetleri API'sini kullanarak cihaz konumunu elde edebilirsiniz. Location verilerini daha fazla kullanmadan cihaz konumunu haritanızda göstermek için konum verisi katmanını kullanabilirsiniz.
Konum verileri katmanı, haritanın sağ üst tarafına Konumum düğmesini ekler. Kullanıcı düğmeye dokunduğunda harita, cihazın konumuna göre ortalanır. Cihaz sabitse konum mavi nokta, hareket hâlindeyse mavi şerit olarak gösterilir.

Belirli bir konumun gezilebilir panoramik fotoğrafı olan Google Street View'u kullanarak bir konum hakkında ek bilgi sağlayabilirsiniz.
Bu görevde, kullanıcının ÖY işaretçisinin bilgi penceresine dokunduğunda haritanın Street View moduna geçmesi için konum verileri katmanını ve Street View'u etkinleştirirsiniz.
4.1 Konum izlemeyi etkinleştirme
Google Haritalar'da konum izlemeyi etkinleştirmek için tek bir kod satırı gerekir. Ancak kullanıcının konum izinleri verdiğinden (çalışma zamanı izni modelini kullanarak) emin olmanız gerekir.
Bu adımda konum izinleri istenir ve konum izleme etkinleştirilir.
AndroidManifest.xmldosyasındaFINE_LOCATIONizninin zaten mevcut olduğunu doğrulayın. Android Studio, Google Haritalar şablonunu seçtiğinizde bu izni ekledi.- Uygulamanızda konum takibini etkinleştirmek için
MapsActivityiçindeenableMyLocation()adlı bir yöntem oluşturun. Bu yöntem herhangi bir bağımsız değişken almaz ve herhangi bir değer döndürmez. enableMyLocation()yöntemini tanımlayın.ACCESS_FINE_LOCATIONiznini kontrol edin. İzin verildiyse konum katmanını etkinleştirin. Aksi takdirde, izni isteyin:
private void enableMyLocation() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
} else {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_FINE_LOCATION},
REQUEST_LOCATION_PERMISSION);
}
}
- Konum katmanını etkinleştirmek için
onMapReady()geri arama özelliğini kullanarakenableMyLocation()numaralı telefonu arayın. onRequestPermissionsResult()yöntemini geçersiz kılın. İzin verildiyseenableMyLocation()numaralı telefonu arayın:
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults) {
// Check if location permissions are granted and if so enable the
// location data layer.
switch (requestCode) {
case REQUEST_LOCATION_PERMISSION:
if (grantResults.length > 0
&& grantResults[0]
== PackageManager.PERMISSION_GRANTED) {
enableMyLocation();
break;
}
}
}
- Uygulamayı çalıştırın. Sağ üst köşede artık cihazın mevcut konumunu gösteren Konumum düğmesi bulunur.
4.2 Street View'u etkinleştirme
Google Haritalar, belirli bir yolda gezinmek için kontroller içeren bir konumun panoramik görünümü olan Street View'u sunar. Street View'un dünya genelinde kapsamı yoktur.
Bu adımda, kullanıcı bir ÖY'nin bilgi penceresine dokunduğunda etkinleştirilen bir Street View panoraması etkinleştirirsiniz. Yapmanız gereken iki işlem var:
- Uygulamanızın işlevinin yalnızca ÖY işaretçilerinde çalışmasını istediğiniz için ÖY işaretçilerini diğer işaretçilerden ayırt edin. Bu şekilde, kullanıcı bir ÖY bilgi penceresine dokunduğunda Street View'i başlatabilirsiniz ancak kullanıcı başka bir işaretçi türüne dokunduğunda başlatamazsınız.
Marker sınıfı, veri eklemenize olanak tanıyan bir setTag() yöntemi içerir. (Veriler, Object ile başlayan her şey olabilir.) Kullanıcılar ÖY'leri tıkladığında oluşturulan işaretçilere bir etiket yerleştirirsiniz.
- Kullanıcı bir
OnInfoWindowClickListeneriçinde etiketlenmiş bir bilgi penceresine dokunduğundaMapFragmentyerineStreetViewPanoramaFragmentyerleştirin. (Aşağıdaki kod, API 12'den önceki Android sürümlerini desteklemek içinSupportMapFragmentveSupportStreetViewPanoramaFragmentkullanır.)
Çalışma zamanında parçalardan herhangi biri değişirse bunları XML'de statik olarak değil, kapsayan Activity sınıfına eklemeniz gerekir.
ÖY işaretçisini etiketleme
onPoiClick()geri arama işlemindepoiMarkertarihindesetTag()numaralı telefonu arayın. İstediğiniz dizeyi iletin:
poiMarker.setTag("poi");
Statik SupportMapFragment'ı çalışma zamanı örneğiyle değiştirme
activity_maps.xmlöğesini açın ve öğeyi, parçalarınız için kapsayıcı görevi görecek bir çerçeve düzenine değiştirin:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
MapsActivityiçindekionCreate()bölümünde, XML'de artık statikSupportMapFragmentolmadığı için kimliğe göreSupportMapFragmentbulan kodu kaldırın. Bunun yerine,SupportMapFragment.newInstance()işlevini çağırarakSupportMapFragmentöğesinin yeni bir çalışma zamanı örneğini oluşturun:
SupportMapFragment mapFragment = SupportMapFragment.newInstance();
FrameLayoutöğesineFragmentManagerile parça işlemi kullanarak parçayı ekleyin:
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, mapFragment).commit();
- Haritanın eşzamansız yüklenmesini tetikleyen kod satırını koruyun:
mapFragment.getMapAsync(this);
OnInfoWindowClickListener ayarlama ve işaretçi etiketini kontrol etme
MapsActivityiçindesetInfoWindowClickToPanorama()adlı bir yöntem kaba kodu oluşturun. Bu yöntem, bağımsız değişken olarakGoogleMapalır vevoiddöndürür:
private void setInfoWindowClickToPanorama(GoogleMap map) {}
GoogleMapiçinOnInfoWindowClickListenerayarlayın:
map.setOnInfoWindowClickListener(
new GoogleMap.OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker marker) {
}
});
onInfoWindowClick()yönteminde, işaretçininonPoiClick()yönteminde ayarladığınız dize etiketini içerip içermediğini kontrol edin:
if (marker.getTag() == "poi") {}
SupportMapFragment'ı SupportStreetViewPanoramaFragment ile değiştirin
- İşaretçi etiketi içeriyorsa
StreetViewPanoramaOptionsnesnesini kullanarak Street View panoramasının konumunu belirtin. Nesneninpositionözelliğini, iletilen işaretçinin konumuna ayarlayın:
StreetViewPanoramaOptions options =
new StreetViewPanoramaOptions().position(
marker.getPosition());
- Oluşturduğunuz
optionsnesnesini ileterekSupportStreetViewPanoramaFragmentiçin yeni bir örnek oluşturun:
SupportStreetViewPanoramaFragment streetViewFragment
= SupportStreetViewPanoramaFragment
.newInstance(options);
- Parça işlemi başlatın. Parça kapsayıcısının içeriğini yeni parça
streetViewFragmentile değiştirin. İşlemi geri yığına ekleyin. Böylece geri düğmesine basıldığında uygulamadan çıkmak yerineSupportMapFragmentsayfasına geri dönülür:
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container,
streetViewFragment)
.addToBackStack(null).commit();
setPoiClick().ile görüşme bittikten sonraonMapReady()bölgesindesetInfoWindowClickToPanorama(mMap)'ı arayın- Uygulamayı çalıştırın. Mountain View (Google genel merkezinin bulunduğu yer) gibi Street View kapsamı olan bir şehri yakınlaştırın ve park gibi bir ÖY bulun. İşaretçi yerleştirmek ve bilgi penceresini göstermek için ÖY'ye dokunun. İşaretçinin bulunduğu konum için Street View moduna girmek üzere bilgi penceresine dokunun. Harita parçasına dönmek için geri düğmesine basın.

7. Çözüm kodu
Wander çözüm kodu.
8. Kodlama yarışması
Sorun: Street View kapsamı olmayan bir konumdaki ÖY'nin bilgi penceresine dokunduğunuzda siyah ekran görünüyor.
- Bir bölgede Street View'un kullanılıp kullanılamadığını kontrol etmek için
OnStreetViewPanomaraReadygeri çağırmasınıStreetViewPanorama.OnStreetViewPanoramaChangeListenerile birlikte uygulayın. - Seçilen bir alanda Street View kullanılamıyorsa harita parçasına geri dönün ve bir hata gösterin.
9. Özet
- Maps API'yi kullanmak için Google API Konsolu'ndan bir API anahtarı almanız gerekir.
- Android Studio'da Google Haritalar Etkinliği şablonunu kullanmak, uygulamanın düzeninde tek bir
ActivityileSupportMapFragmentoluşturur. Şablon ayrıca uygulama manifestineACCESS_FINE_PERMISSIONöğesini ekler, etkinliğinizdeOnMapReadyCallbacköğesini uygular ve gereklionMapReady()yöntemini geçersiz kılar.
Çalışma zamanında bir GoogleMap öğesinin harita türünü değiştirmek için GoogleMap.setMapType() yöntemini kullanın. Google Haritası aşağıdaki harita türlerinden biri olabilir:
- Normal: Normal yol haritası. Yolları, insanlar tarafından inşa edilen bazı yapıları ve nehirler gibi önemli doğal özellikleri gösterir. Yol ve özellik etiketleri de görünür.
- Hibrit: Uydu fotoğrafı verilerine yol haritaları eklenir. Yol ve özellik etiketleri de görünür.
- Uydu: Fotoğraf verileri. Yol ve özellik etiketleri görünmüyor.
- Arazi: Topografik veriler. Haritada renkler, kontur çizgileri ve etiketler ile perspektif gölgelendirme yer alır. Bazı yollar ve etiketler de görünür.
- Yok**:** Harita yok.
Google Haritalar hakkında:
- İşaretçi, belirli bir coğrafi konumun göstergesidir.
- İşaretçiye dokunulduğunda varsayılan olarak konumla ilgili bilgilerin yer aldığı bir bilgi penceresi gösterilir.
- Varsayılan olarak, ilgi çekici yerler (İÇY'ler) temel haritada ilgili simgeleriyle birlikte gösterilir. Önemli yerler arasında parklar, okullar, devlet binaları ve daha fazlası yer alır.
- Ayrıca, harita türü
normalolduğunda işletme ÖY'leri (mağazalar, restoranlar, oteller vb.) varsayılan olarak haritada görünür. OnPoiClickListenerkullanarak ÖY'lerdeki tıklamaları yakalayabilirsiniz.- Stil Sihirbazı'nı kullanarak Google Haritası'ndaki neredeyse tüm öğelerin görsel görünümünü değiştirebilirsiniz. Stil Sihirbazı,
setMapStyle()yöntemini kullanarak Google Harita'ya ilettiğiniz bir JSON dosyası oluşturur. - Varsayılan rengi değiştirerek veya varsayılan işaretçi simgesini özel bir resimle değiştirerek işaretçilerinizi özelleştirebilirsiniz.
Diğer önemli bilgiler:
- Bir resmi coğrafi konuma sabitlemek için yer paylaşımı kullanın.
- Resmi, resmin metre cinsinden boyutunu ve resmin konumunu belirtmek için
GroundOverlayOptionsnesnesini kullanın. Yer paylaşımını haritaya ayarlamak için bu nesneyiGoogleMap.addGroundOverlay()yöntemine iletin. - Uygulamanızda
ACCESS_FINE_LOCATIONizni varsamMap.setMyLocationEnabled(true)yöntemini kullanarak konum takibini etkinleştirebilirsiniz. - Google Street View, kapsama alanı boyunca belirlenmiş yollardan 360 derecelik panoramik görünümler sunar.
- Yeni bir Street View parçası oluşturmak için
StreetViewPanoramaFragment.newInstance()yöntemini kullanın. - Görünüm seçeneklerini belirtmek için
StreetViewPanoramaOptionsnesnesi kullanın. NesneyinewInstance()yöntemine iletin.
10. Daha fazla bilgi
İlgili kavram belgeleri 9.1: Google Maps API bölümünde yer almaktadır.
Android geliştirici belgeleri:
- Google Haritalar Android API'sini kullanmaya başlama
- İşaretçi içeren harita ekleme
- Harita Nesneleri
- Stil Verilmiş Harita Ekleme
- Street View
- Zemin Yer Paylaşımları
Referans belgeleri:
11. Ev ödevi
Bu bölümde, bir eğitmenin yönettiği kurs kapsamında bu codelab'i tamamlayan öğrenciler için olası ödevler listelenir. Eğitmen, aşağıdakileri yapmalıdır:
- Gerekirse ev ödevi atayın.
- Öğrencilere ev ödevi ödevlerini nasıl göndereceklerini bildirin.
- Ev ödevlerine not verin.
Eğitmenler bu önerileri istedikleri ölçüde kullanabilir ve uygun olduğunu düşündükleri diğer ev ödevlerini verebilirler.
Bu codelab'i kendi başınıza tamamlıyorsanız bilginizi test etmek için bu ödevleri kullanabilirsiniz.
Uygulama oluşturma ve çalıştırma
- Uygulama başlatıldığında Google Haritalar'ı yükleyen Google Haritalar Etkinliği şablonunu kullanan yeni bir uygulama oluşturun.
- Google Harita yüklendiğinde kamerayı okulunuzun, evinizin veya sizin için anlamı olan başka bir konumun bulunduğu yere taşıyın.
- Haritaya iki işaretçi ekleyin. Biri okulunuzun bulunduğu yere, diğeri ise evinize veya anlamlı başka bir yere olsun.
- Varsayılan rengi değiştirerek veya varsayılan işaretçi simgesini özel bir resimle değiştirerek işaretçi simgelerini özelleştirin.
İpucu: onMapReady (GoogleMap googleMap) belgelerine bakın.
Bu soruları yanıtlayın
1. Soru
Harita yüklendiğinde ve uygulamada kullanılmaya hazır olduğunda hangi yöntem çağrılır?
onMapReady (GoogleMapgoogleMap)onMapLoaded (GoogleMapgoogleMap)onMapCreate (GoogleMapgoogleMap)onMapInitialize (GoogleMapgoogleMap)
2. Soru
Uygulamanıza Google Haritalar'ı dahil etmek için hangi Android bileşenlerini kullanabilirsiniz?
MapViewveMapFragmentMapFragmentveMapActivityMapViewveMapActivity- Yalnızca
MapFragment
3. Soru
Google Haritalar Android API'si ne tür haritalar sunar?
- Normal, hibrit, arazi, uydu ve yol haritası
- Normal, hibrit, arazi, uydu ve "yok"
- Hibrit, arazi, uydu, yol haritası ve "yok"
- Normal, arazi, uydu, resim haritası ve "yok"
4. Soru
Bir önemli yere (ÖY) tıklama işlevi eklemek için hangi arayüzü kullanıyorsunuz?
GoogleMap.OnPoiListenerGoogleMap.OnPoiClickListenerGoogleMap.OnPoiClickGoogleMap.OnPoiClicked
Uygulamanızı notlandırma için gönderme
Değerlendirme uzmanları için rehberlik
Uygulamada aşağıdaki özelliklerin bulunduğundan emin olun:
- Uygulama başlatıldığında Google Harita doğru şekilde gösterilir. Bu, API anahtarının düzgün şekilde oluşturulduğunu gösterir.
- Google Harita yüklendikten sonra kamera, öğrencinin evine veya okuluna doğru hareket eder. Kodda bu adım
onMapReady (GoogleMap googleMap)geri çağırma yönteminde gerçekleşmelidir. - İşaretçiler, öğrencinin okulunun bulunduğu konumda ve öğrencinin evi gibi başka bir konumda gösterilir.
- İki işaretçi özelleştirilir. Örneğin, işaretçiler varsayılan kırmızı renk dışında bir renk kullanıyor veya özel bir simge kullanıyor.
12. Sonraki Codelab
Advanced Android Development eğitim kursundaki tüm codelab'leri görmek için Advanced Android Development codelab'leri açılış sayfasını ziyaret edin.