Android Dersleri

Android Google Maps API Kullanımı

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

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.

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.

Burada Google Maps Activity de seçilebilir.

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.

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.

<?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.

<?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.

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.

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.

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…

Mehmet Kirazlı

İstanbul Eyüp'te ikamet ediyorum. Giresun Alucra'lıyım. Bilgisayar Mühendisliği bölümünden 2013 yılında mezun oldum. "Yeni Başlayanlar için Java 8" kitabının yazarıyım. Şu anda özel bir firmada Mobil Yazılım Geliştirme Uzmanı olarak çalışıyorum.

Paylaş
Yazar
Mehmet Kirazlı

Son Gönderiler

Android Firebase Event (not set) Hatası Çözümü

Merhaba. Firebase Events'e istatistik attığınızda not set şeklinde bir değer görüyorsanız olası çözümünü göstereceğim. (daha&helliip;) Daha Fazla Oku

% gün önce

Namaz Vakitleri Uygulaması Yayında

Merhaba. Android cihazlar için hazırladığım Namaz Vakitleri uygulaması ile 200'e yakın ülkede tüm namaz-ezan vakitlerini… Daha Fazla Oku

% gün önce

Kaza Namazı ve Oruç Takip Uygulaması

Selamlar. İnsanlar için faydalı olması amacıyla geliştirdiğim Kaza Namazı ve Oruç Takip Uygulamasını sizlere tanıtmak… Daha Fazla Oku

% gün önce

Android Volley Kullanımı ve JSON Parse İşlemleri

Volley, Android uygulamalarımızda kullandığımız AsyncTask'ın alternatifi olarak ortaya çıkarılan, Google I/O 2013 sunumunda duyurulan bir… Daha Fazla Oku

% gün önce

Android ButterKnife Kütüphanesi Kullanımı

Merhaba. Bu yazımda Android platformunda kullanıma sunulan, bazı kod bloklarını basitleştiren ve okunabilirliği arttıran ButterKnife… Daha Fazla Oku

% gün önce

Admob TikTok Reklamları Engelleme

Merhaba. Bu yazımda artık baş belası olmuş TikTok reklamlarını, Android uygulamalarımızdaki Admob reklamlarından nasıl kaldıracağımızı… Daha Fazla Oku

% gün önce