Bu konuda, Android için Haritalar SDK'sını kullanacak şekilde projeyi yapılandırdıktan sonra Android uygulamasına temel bir haritanın nasıl ekleneceği açıklanmaktadır. Harita ekledikten sonra harita türünü ve özelliklerini değiştirebilirsiniz.
Genel Bakış
Android için Haritalar SDK'sı, uygulamanızın bir haritanın yaşam döngüsünü, işlevini ve verilerini yönetmek için kullanabileceği çeşitli sınıflar sağlar. Sınıflar, Android kullanıcı arayüzü modeline dayalı kullanıcı etkileşimlerini (ör. haritanın ilk durumunu ayarlama ve çalışma zamanında kullanıcıdan gelen hareket girişine yanıt verme) destekler.
Haritalarla ilgili ana arayüz ve sınıflar:
GoogleMap
: Temel harita özelliklerini ve verilerini yönetmek için giriş noktası. Uygulamanız yalnızca birSupportMapFragment
veyaMapView
nesnesinden alındıktan sonra birGoogleMap
nesnesine erişebilir.SupportMapFragment
:GoogleMap
nesnesinin yaşam döngüsünü yönetmek için kullanılan bir fragman.MapView
:GoogleMap
nesnesinin yaşam döngüsünü yönetmek için kullanılan bir görünüm.OnMapReadyCallback
:GoogleMap
nesnesi için etkinlikleri ve kullanıcı etkileşimini yöneten bir geri çağırma arayüzü.
GoogleMap
nesnesi aşağıdaki işlemleri otomatik olarak gerçekleştirir:
- Google Haritalar hizmetine bağlanma.
- Harita karoları indiriliyor.
- Cihaz ekranında kartları görüntüleme.
- Kaydırma ve yakınlaştırma gibi çeşitli kontrolleri gösterme.
- Haritayı hareket ettirerek ve yakınlaştırıp uzaklaştırarak kaydırma ve yakınlaştırma hareketlerine yanıt verme.
Uygulamanızda GoogleMap
nesnesi kullanmak için harita için kapsayıcı nesnesi olarak bir SupportMapFragment
veya MapView
nesnesi kullanmanız ve ardından GoogleMap
nesnesini kapsayıcıdan almanız gerekir. Kapsayıcı sınıfları bir Android fragmanından veya görünümünden türetildiği için haritaya, Android temel sınıflarının yaşam döngüsü yönetimi ve kullanıcı arayüzü özelliklerini sağlar.
SupportMapFragment
sınıfı, GoogleMap
nesnesi için daha modern ve yaygın bir kapsayıcıdır.
Kodu görüntüleme
Aşağıdaki kod, bir snippet'i statik olarak eklerken bu konuda kullanılan tam Java etkinliğinden alınmıştır. Android projesi, Boş proje şablonundan oluşturulduktan sonra proje yapılandırması kılavuzuna göre güncellendi. Bu konudaki adımları uyguladıktan sonra kodunuz proje şablonuna göre farklılık gösterebilir.
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; 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; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
Harita eklemek için
Bu bölümde, harita kapsayıcısı olarak bir parça kullanılarak temel bir haritanın nasıl ekleneceği açıklanmaktadır. Bunun yerine bir görünüm de kullanabilirsiniz. Örnek için GitHub'daki RawMapViewDemoActivity dosyasına bakın.
Temel adımlar:
SDK'yı almak, API anahtarı edinmek ve gerekli çerçeveleri eklemek için şu makaledeki adımları uygulayın:
Etkinliğe, haritayı işleyen bir
SupportMapFragment
nesnesi ekleyin. Parçayı statik veya dinamik olarak ekleyebilirsiniz.OnMapReadyCallback
arayüzünü uygulayın.Düzen dosyasını içerik görünümü olarak ayarlayın.
Parçayı statik olarak eklediyseniz parçanın bir adını alın.
Geri aramayı kaydedin.
GoogleMap
nesnesine erişin.
SupportMapFragment nesnesi ekleme
Uygulamanıza statik veya dinamik olarak bir SupportMapFragment
nesnesi ekleyebilirsiniz.
En basit yöntem, statik olarak eklemektir. Parçayı dinamik olarak eklerseniz parça üzerinde ek işlemler (ör. çalışma zamanında kaldırma ve değiştirme) yapabilirsiniz.
Statik olarak bir snippet eklemek için
Haritayı işleyecek etkinliğin düzenleme dosyasında:
fragment
öğesi ekleyin.- Ad beyanını ekleyin
xmlns:map="http://schemas.android.com/apk/res-auto"
. Bu,maps
özel XML özelliklerinin kullanılmasını sağlar. fragment
öğesindeandroid:name
özelliğinicom.google.android.gms.maps.SupportMapFragment
olarak ayarlayın.fragment
öğesineandroid:id
özelliğini ekleyin ve bu özelliği R.id.map kaynak kimliğine (@+id/map
) ayarlayın.
Örneğin, fragment
öğesi içeren eksiksiz bir düzen dosyası aşağıda verilmiştir:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Dinamik olarak bir parça eklemek için
Etkinlikte:
SupportMapFragment
örneği oluşturun.- Parçayı etkinliğe ekleyen bir işlem gönderin. Daha fazla bilgi için İşlemleri Parçalara Bölme başlıklı makaleyi inceleyin.
Örneğin:
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.my_container, mapFragment) .commit()
Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.my_container, mapFragment) .commit();
OnMapReadyCallback
arayüzünü uygulama
Etkinlik beyanını aşağıdaki şekilde güncelleyin:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
İçerik görünümünü ayarlama
Etkinliğinizin onCreate
yönteminde setContentView
yöntemini çağırın ve düzen dosyasını içerik görünümü olarak ayarlayın.
Örneğin, düzen dosyası main.xml
adlıysa:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Parçanın adını alın ve geri çağırma işlevini kaydedin
Parçanın adını almak için
FragmentManager.findFragmentById
yöntemini çağırın ve düzen dosyanızdaki parçanın kaynak kimliğini iletin. Parçayı dinamik olarak eklediyseniz, herkese açık kullanıcı adını zaten aldığınız için bu adımı atlayın.Fragmanda geri çağırma işlevini ayarlamak için
getMapAsync
yöntemini çağırın.
Örneğin, snippet'i statik olarak eklediyseniz:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
GoogleMap
nesnesinin adını alma
GoogleMap
nesnesinin adını almak için onMapReady
geri çağırma yöntemini kullanın. Geri çağırma işlevi, harita kullanıcı girişi almaya hazır olduğunda tetiklenir. Haritayı güncellemek için kullanabileceğiniz, GoogleMap
sınıfının null olmayan bir örneğini sağlar.
Bu örnekte onMapReady
geri çağırma işlevi, GoogleMap
nesnesinin bir işleyicisini alır ve ardından haritaya bir işaretçi eklenir:
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }
Uygulamayı başarıyla oluşturup çalıştırdığınızda Null Adası'nda (sıfır derece enlem ve sıfır derece boylam) bir işaretçi içeren bir harita gösterilir.
Etkinliğin tamamını görüntülemek için kodu inceleyin:
Tamamlanan Etkinliği Görüntüleme
Sırada ne var?
Bu adımları tamamladıktan sonra harita ayarlarını yapılandırabilirsiniz.