Merhaba. Android uygulamalarında kullanımı yaygın olan Google Maps API kullanımını anlatacağım.
Uygulamalarınıza eklediğiniz haritalar üzerinde birçok işlem yapabilirsiniz. Örneğin konum takibi, bina cadde çizimleri, yakındaki mekanları görme gibi birçok fikir için Maps API kullanmak gereklidir.
Google haritası dışında Yandex‘in ya da OSM(Open Street Map) Sdk’larını indirip kullanabilirsiniz fakat kaynak ve işlev bakımından benim tercihim Google Map oldu.
Google haritasını projeniz eklemek ve kullanmak için sırasıyla aşağıdaki işlemleri yapacağız:
1 – Developer Console’ da proje oluşturmak
2 – Google Maps API’ yi etkinleştirmek
3 – API Key almak
4 – Fingerprint öğrenmek ve konsola eklemek
5 – Android Studio projesi oluşturmak
6 – Google Play Services güncellemesi
7 – AndroidManifest.xml ve Build.gradle dosyasını güncellemek
8 – Kod kısmına geçmek
Developer Console’ da Proje Oluşturmak
Bu adrese girip aşağıdaki gibi proje oluşturalım.
Proje adınızı ve kimliğinizi belirledikten sonra “Oluştur” butonuyla projemizi oluşturalım.
Google Maps API’ yi Etkinleştirmek
Projeyi Oluşturduk. Şimdi Google Maps API’yi etkinleştirelim. Bunun için aynı ekranda soldaki menüden API’ler ve Hizmetler -> Kitaplık butonuna tıklayalım.
Karşımıza gelen alana aşağıdaki gibi Google Maps Android API yazalım ve gelen sonuca tıklayalım.
Tıkladıktan sonra Etkinleştir butonuna tıklayarak Google Maps API’ yi etkinleştirelim.
API Key Almak
Proje oluştuktan sonra tekrar soldaki menüden API’ler ve Hizmetler -> Kimlik bilgileri butonuna basıp Kimlik bilgilerini oluştur -> API anahtarı seçeneğine tıklayalım.
Tıkladıktan sonra bize bir API Key verilecektir. Bunu birazdan göreceğiniz konsola ve Android studio projesine eklememiz gerekecek.
API anahtarını aldık. Anahtarı Kısıtla butonuna tıklayarak, sadece bizim projemizden bu API’ye erişebilmek için kısıtlama yapmamız gerekecek. Çünkü Google Maps API’nin bir kullanım kotası vardır ve API Key’i ele geçirenler API’yi kendi uygulamalarında kullanarak kotayı tüketebilir.
Fingerprint Öğrenmek ve Konsola Eklemek
Şimdi anahtarı kısıtlayacağız yani başkasının kullanmasını engelleyeceğiz diyebiliriz. Uygulamamızın Paket Adı ve Fingerprint bilgilerimizle beraber satır bazında ekleme yapmamız gerekecek. Aşağıda son halini ekledim. “Uygulama kısıtlamaları” kısmını “Android Uygulamaları” olarak seçmeliyiz. En alt kısma ise çalıştığımız her bilgisayar için yeni bir satır eklemeliyiz. Ben bu bilgisayara ait SHA-1 sertifikası ekledim. Aynı API Key ile başka bir projede çalışmak isterseniz de başka bir paket adı ve aynı SHA-1 sertifikasını eklemeniz gerekir.
Buradaki SHA-1 sertifikası yani Fingerprint’i nereden öğreneceğiz ?
Bunun 2 yolu var. Birincisi Android Studio’da proje oluşturduktan sonra aşağıdaki gibi sağdaki Gradle panelini açarak signingReport butonuna kadar gelip üzerine çift tıklamak. Tıkladıktan sonra size SHA-1 değerini verecektir. Bunu kopyalayıp ekleyebilirsiniz.
Diğer yolu ise komut satırından(cmd.exe) bulmaktır. Bunun için Java programının olduğu klasördeki bin dizinine gidiniz. Bendeki bu dizin şu şekilde
1 |
C:\Program Files\Java\jdk1.8.0_91\bin |
Bu klasörü açtıktan sonra SHIFT butonuna basılı tutarak farenizin sağ tuşuna basıp gelen seçeneklerden “Komut penceresini burada aç” ‘a basınız ve komut satırı açılacaktır.
Komut satırı açıldıktan sonra görünümü:
Komut satırına aşağıdaki komutu yazın. Buradan alıp pencereye sağ tıklayarak kısayoldan yapıştırabilirsiniz.
1 |
keytool -list -v -keystore C:\Users\mkirazli\.android\debug.keystore |
mkirazli değerini kendinize göre düzenleyiniz. Enter’a bastıktan sonra size SHA-1 değerini verecektir. Password kısmına bir şey girmeden Enter’a basınız.
Bu değeri de kopyalayıp yukarı bahsettiğim anahtar kısıtlamasındaki bölüme yapıştırabilirsiniz. Görüldüğü üzere 1.yöntemle aynı SHA-1 anahtarını verdi.
Android Studio Projesi Oluşturuyoruz
Sıra geldi proje oluşturmaya. Siz biliyorsunuz fakat ben yine de nasıl oluşturulur göstereyim.

Proje oluşturduktan sonra derleme için bir müddet bekleyeceğiz.
Google Play Services Güncellemesi
Proje oluştu fakat Google Maps kullanabilmek için Google Play Services‘i yüklemek ya da son sürüme güncellemek gerekiyor.
Üst menüden Tools ->Android -> SDK Manager seçeneğine tıklayarak SDK Yükleme penceresini açınız.
Bende yüklü olduğu için mavi tikli. Eğer güncellenmesi gerekiyorsa içinde çizgi olan beyaz kutu görünümünde olacaktır ve üzerine tıklayıp Apply diyerek devam ediniz ve güncellemeyi tamamlayınız.
AndroidManifest.xml ve Build.Gradle Dosyasını Güncellemek
Google Maps API’ yi kullanabilmek için build.gradle dosyasındaki dependencies kısmına şu satırı ekleyelim.
1 |
compile 'com.google.android.gms:play-services-maps:11.0.4' |
11.0.4 değeri sizde başka olabilir. Şuan 11.8.0 var diye biliyorum. En güncelini kullanmak isterseniz 11.8.0 kullanın fakat sdk güncellemesi yapmanız gerekir. Şimdilik 11.0.4 olarak bıraktım.
AndroidManifest.xml dosyası için ise :
Az önce aldığımız API_KEY değerini buraya ekleyeceğiz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="mehmetkirazli.googlemap"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBLxim80FEXXXXXXXXXXXXXXXX" /> </application> </manifest> |
2 adet meta-data değeri ekledik. Birisinde API_KEY değeri var diğerinde ise Google versiyonu. Versiyon zorunlu değil ama yine de ekledim.
Son olarak kod kısmında yani MainActivity classında kodumuzu yazacağız.
Kodlamaya Başlıyoruz
Öncelikle activity_main.xml dosyasına bir FRAGMENT ekliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="mehmetkirazli.googlemap.MainActivity"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> |
MainActivity.java dosyamızda ise basit bir harita tanımladık ve 2 adet marker ekledik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package mehmetkirazli.googlemap; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { LatLng galataKulesi = new LatLng(41.025629, 28.974138); googleMap.addMarker(new MarkerOptions().position(galataKulesi).title("Burası Galata Kulesi")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(galataKulesi)); googleMap.addMarker(new MarkerOptions() .position(new LatLng(41.047967,28.933790)) .title("BURADASINIZ") .snippet("Eyüp Sultan Cami")); } } |
Uygulamayı çalıştırdığımızda haritamız şu şekilde olacak
Not : Uygulamayı emülatörde çalıştırmak sorun olabilir (Play Services Sdk’sı eski olabilir). Siz telefonunuzda çalıştırmayı deneyin.
Haritamızda biraz değişiklik yapalım ve bir de poligon ekleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
package mehmetkirazli.googlemap; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.Polygon; import com.google.android.gms.maps.model.PolygonOptions; import com.google.android.gms.maps.model.PolylineOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); // üstteki toolbarı kaldırdık setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { LatLng galataKulesi = new LatLng(41.025629, 28.974138); googleMap.addMarker(new MarkerOptions().position(galataKulesi).title("Burası Galata Kulesi")); googleMap.addMarker(new MarkerOptions() .position(new LatLng(41.047967,28.933790)) .title("BURADASINIZ") .snippet("Eyüp Sultan Cami")); googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(galataKulesi, 12)); googleMap.getUiSettings().setMyLocationButtonEnabled(true); // konumumu göster butonu aktif edildi googleMap.getUiSettings().setCompassEnabled(true); // pusula butonu aktif edildi googleMap.getUiSettings().setZoomControlsEnabled(true); // zoom butonları aktif edildi googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // hibrit görünümü set edildi // googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); googleMap.setTrafficEnabled(true); // trafik durumu aktif edildi PolygonOptions polygonOptions = new PolygonOptions() .add(new LatLng(41.053832, 28.972283)) .add(new LatLng(41.055056, 28.992326)) .add(new LatLng(41.048958, 28.990987)) .add(new LatLng(41.040214, 28.979840)); Polygon polygon = googleMap.addPolygon(polygonOptions); polygon.setStrokeColor(Color.GREEN); // poligon çizgileri yeşil olarak belirlendi } } |
Son görüntümüz şu şekilde olacaktır:
21.satırda üstteki toolbar’ı da kaldırmış olduk. Bu arada uydu görünümünün Türkiye için çalışmadığını belirtelim.
1 |
googleMap.setMapType(GoogleMap.MAP_TYPE_STELLITE); // Türkiye'de çalışmıyor |
Genel olarak Google Maps API kullanımı bu şekildedir. Google’ın harita konusunda birçok API’ si mevcuttur. Geocoding, API, GeoLocation API vs.
Bunları incelemek isterseniz sol üst köşeden File -> Close Project tıkladıktan sonra çıkan pencereden Import Project veya hiç Close demeden File -> New -> Import Project seçeneğine tıklayıp aşağıdaki gibi Sdk’nın kurulu olduğu dizinden /extras/google/google_play_services/samples/maps seçip ilerleyebilirsiniz.
maps projesini açtığınızda, kullanabileceğiniz neredeyse tüm harita sınıfları karşınıza gelecektir. Hepsini tek tek deneyip görebilirsiniz.
KAYNAK KODU İNDİR
Kaynak kodunun çalıştırırken Developer Console’da yeni proje açmayı ve projenizdeki API_KEY’i değiştirmeyi unutmayın.
Bir sonraki derste görüşmek üzere…