Android için Haritalar SDK'sını kullanarak doğrudan Google Wear OS cihazlarda çalışan, haritaya dayalı bir giyilebilir uygulama oluşturabilirsiniz. Uygulamanızın kullanıcıları, bileklerine bakarak haritadaki konumlarını görebilir. Örneğin, rota üzerindeki konumlarını işaretleyebilir, ardından ayrıntılar için yakınlaştırabilir veya bir işaretçiye dokunarak uygulamanız tarafından sağlanan bilgi penceresini görebilirler.
Bu sayfada, Wear cihazlarda kullanılabilen API işlevleri açıklanmakta ve uygulamanızı oluşturmaya başlamanıza yardımcı olunmaktadır.
Wear OS'i kullanmaya başlama
Android için Haritalar SDK'sı ile giyilebilir cihaz uygulaması oluşturmak, diğer Android cihazlar için Google Haritalar uygulaması oluşturmayla temelde aynıdır. Fark, uygulamanın kullanılabilirliğini ve performansını optimize etmek için giyilebilir cihazın daha küçük form faktörüne yönelik tasarımınızdadır.
Proje oluşturma, kitaplık ekleme ve paketleme kolaylıkları sağladığı için Wear OS geliştirme için önerilen araç Android Studio'dur.
Giyilebilir cihaz uygulaması tasarlamayla ilgili genel yardım için Wear OS tasarım yönergelerini inceleyin. İlk giyilebilir uygulamanızı oluşturma konusunda yardım için giyilebilir uygulama oluşturma kılavuzuna bakın.
Wear OS'te ilk haritalar uygulamanızı oluşturma
Bu hızlı kılavuzda, Android için Haritalar SDK'sını bildiğinizi, uygulamanızda giyilebilir modül oluşturmak için Wear OS kılavuzlarını uyguladığınızı ve artık giyilebilir modüle harita eklemek istediğinizi varsayıyoruz.
Wear modülünüz için bağımlılık ekleme
Uygulamanızın Wear OS modülünün build.gradle.kts
dosyasına aşağıdaki bağımlılıkların eklendiğinden emin olun:
dependencies { // ... compileOnly("com.google.android.wearable:wearable:2.9.0") implementation("com.google.android.support:wearable:2.9.0") implementation("com.google.android.gms:play-services-maps:19.0.0") // This dependency is necessary for ambient mode implementation("androidx.wear:wear:1.3.0") }
Bağımlılıklar hakkında daha fazla bilgi için Mevcut projenize Wear OS modülü ekleme başlıklı kılavuzu inceleyin.
Kapatmak için kaydırma hareketi uygulama ve ilk arka plan rengini ayarlama
Haritayı giyilebilir cihazda görüntülemek için SwipeDismissFrameLayout
kullanmanızı öneririz. SwipeDismissFrameLayout
sınıfını kullanarak kaydırarak kapat hareketini uygulayabilirsiniz. Böylece kullanıcılar ekranın en sol kenarından kaydırarak uygulamadan çıkabilir.
Özel bir başlangıç arka plan rengi ayarlamak için map:backgroundColor
XML özelliğini kullanarak gerçek harita karoları yüklenene kadar görüntülenecek rengi tanımlayın.
SwipeDismissFrameLayout
ve backgroundColor
öğelerini, SupportMapFragment
öğesinin kapsayıcısı olarak düzen tanımınıza ekleyin:
<androidx.wear.widget.SwipeDismissFrameLayout android:id="@+id/map_container" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" map:backgroundColor="#fff0b2dd" /> </androidx.wear.widget.SwipeDismissFrameLayout>
Aktivitenizde SwipeDismissFrameLayout
nesnesini aldığınızda bir geri çağırma işlevi ekleyin ve geri çağırma işlevinin davranışını, aşağıdaki gibi gerekli kapatma işlemini gerçekleştirecek şekilde ayarlayın:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(MainActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. val mapFrameLayout = findViewById<SwipeDismissFrameLayout>(R.id.map_container) mapFrameLayout.addCallback(object : SwipeDismissFrameLayout.Callback() { override fun onDismissed(layout: SwipeDismissFrameLayout) { onBackPressed() } }) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this) } // ... }
Java
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(MainActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Retrieve the containers for the root of the layout and the map. Margins will need to be // set on them to account for the system window insets. final SwipeDismissFrameLayout mapFrameLayout = (SwipeDismissFrameLayout) findViewById( R.id.map_container); mapFrameLayout.addCallback(new SwipeDismissFrameLayout.Callback() { @Override public void onDismissed(SwipeDismissFrameLayout layout) { onBackPressed(); } }); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // ... }
Harita ekleme
GoogleMap nesnesinin adını almak için her zamanki gibi onMapReady(GoogleMap)
geri çağırma yöntemini kullanın. Geri çağırma işlevi, harita kullanıma hazır olduğunda tetiklenir. Geri çağırma yönteminde haritaya işaretçi veya çoklu çizgi ekleyebilir, dinleyici ekleyebilir ya da kamerayı hareket ettirebilirsiniz. Aşağıdaki örnekte Sydney Opera Binası'nın yakınına bir işaretçi eklenmiştir:
Kotlin
private val sydney = LatLng(-33.85704, 151.21522) override fun onMapReady(googleMap: GoogleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker( MarkerOptions().position(sydney) .title("Sydney Opera House") ) // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 10f)) }
Java
private static final LatLng SYDNEY = new LatLng(-33.85704, 151.21522); @Override public void onMapReady(@NonNull GoogleMap googleMap) { // Add a marker with a title that is shown in its info window. googleMap.addMarker(new MarkerOptions().position(SYDNEY) .title("Sydney Opera House")); // Move the camera to show the marker. googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10)); }
Ambiyans modunu etkinleştirme
Android için Haritalar SDK'sı, giyilebilir uygulamalarda ortam modunu destekler. Ambiyans modunu destekleyen uygulamalara bazen her zaman açık uygulamalar da denir. Kullanıcı uygulamayı etkin olarak kullanmayı bıraktığında etkinleştirilen ortam modu, uygulamanın giyilebilir cihazda görünür kalmasını sağlar.
Android için Haritalar SDK'sı, ambiyans modunda kullanılmak üzere haritanın basitleştirilmiş, düşük renkli bir oluşturma işlemi sağlar. Cihaz etkileşimli moddan ambiyans moduna geçtiğinde harita stili otomatik olarak ayarlanır. Ambiyans modunda tüm işaretçiler, nesneler ve kullanıcı arayüzü kontrolleri kaybolur. Bu sayede uygulamanızın güç tüketimi azalır ve kadranlar gibi diğer ambiyans uygulamalarıyla tutarlı bir görünüm ve tarz elde edilir.
Uygulamanızın haritanın ambiyans modunu kullanmasını sağlamak için aşağıdaki adımları uygulayın:
- Android SDK'nızı, etkinliklerin ambiyans moduna geçmesine olanak tanıyan API'leri sağlayan Android 6.0 (API 23) veya sonraki bir platformu içerecek şekilde güncelleyin. SDK'nızı nasıl güncelleyeceğiniz hakkında bilgi edinmek için SDK paketleri ekleme ile ilgili Android dokümanlarına bakın.
- Uygulama manifestinde
targetSdkVersion
değerini 23 veya daha yüksek bir değere ayarlayarak projenizin Android 6.0 veya sonraki sürümleri hedeflediğinden emin olun. - Giyilebilir cihaz bağımlılıkları uygulamanızın
build.gradle.kts
dosyasına ekleyin. Bu sayfadaki örneği inceleyin. - Uygulamanızı görünür tutma konulu Android eğitim sınıfında açıklandığı gibi, giyilebilir cihazlar için paylaşılan kitaplık girişini giyilebilir cihaz uygulaması manifest dosyasına ekleyin.
- Uygulamanızın görünür kalmasını sağlama konulu Android eğitim sınıfında açıklandığı gibi,
WAKE_LOCK
iznini el ve giyilebilir cihaz uygulama manifestlerine ekleyin. - Etkinliğinizin
onCreate()
yöntemindeAmbientModeSupport.attach()
yöntemini çağırın. Bu, işletim sistemine uygulamanın her zaman açık olduğunu bildirir. Böylece cihaz kapandığında kadrana dönmek yerine ambiyans moduna girer. - Ambiyans modu durum değişikliklerini alabilmesi için Activity'nizde
AmbientModeSupport.AmbientCallbackProvider
arayüzünü uygulayın. - Haritanızı, ambiyans modunu destekleyecek şekilde ayarlayın. Bunu, etkinliğin XML düzeni dosyasında
map:ambientEnabled="true"
özelliğini ayarlayarak veyaGoogleMapOptions.ambientEnabled(true)
özelliğini ayarlayarak programatik olarak yapabilirsiniz. Bu ayar, API'ye ambiyans modunda kullanmak için gerekli harita karolarını önceden yüklemesi gerektiğini bildirir. - Etkinlik ambiyans moduna geçtiğinde sistem, sağladığınız
AmbientCallback
içindeonEnterAmbient()
yöntemini çağırır.onEnterAmbient()
'u geçersiz kılın veSupportMapFragment.onEnterAmbient(ambientDetails)
veyaMapView.onEnterAmbient(ambientDetails)
'i arayın. API, haritanın etkileşimli olmayan ve düşük renkli bir oluşturma işlemine geçer. - Benzer şekilde,
onExitAmbient()
içindeSupportMapFragment.onExitAmbient()
veyaMapView.onExitAmbient()
'i arayın. API, haritanın normal oluşturma işlemine geçer.
Aşağıdaki kod örneği, etkinlikte ambiyans modunu etkinleştirir:
Kotlin
class AmbientActivity : AppCompatActivity(), AmbientModeSupport.AmbientCallbackProvider { private lateinit var mapFragment: SupportMapFragment public override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main) // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. val controller = AmbientModeSupport.attach(this) Log.d(AmbientActivity::class.java.simpleName, "Is ambient enabled: " + controller.isAmbient) // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment } override fun getAmbientCallback(): AmbientModeSupport.AmbientCallback { return object : AmbientModeSupport.AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ override fun onEnterAmbient(ambientDetails: Bundle) { super.onEnterAmbient(ambientDetails) mapFragment.onEnterAmbient(ambientDetails) } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ override fun onExitAmbient() { super.onExitAmbient() mapFragment.onExitAmbient() } } } }
Java
public class AmbientActivity extends AppCompatActivity implements AmbientModeSupport.AmbientCallbackProvider { private SupportMapFragment mapFragment; public void onCreate(Bundle savedState) { super.onCreate(savedState); // Set the layout. It only contains a SupportMapFragment and a DismissOverlay. setContentView(R.layout.activity_main); // Enable ambient support, so the map remains visible in simplified, low-color display // when the user is no longer actively using the app but the app is still visible on the // watch face. AmbientModeSupport.AmbientController controller = AmbientModeSupport.attach(this); Log.d(AmbientActivity.class.getSimpleName(), "Is ambient enabled: " + controller.isAmbient()); // Obtain the MapFragment and set the async listener to be notified when the map is ready. mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); } @Override public AmbientCallback getAmbientCallback() { return new AmbientCallback() { /** * Starts ambient mode on the map. * The API swaps to a non-interactive and low-color rendering of the map when the user is no * longer actively using the app. */ @Override public void onEnterAmbient(Bundle ambientDetails) { super.onEnterAmbient(ambientDetails); mapFragment.onEnterAmbient(ambientDetails); } /** * Exits ambient mode on the map. * The API swaps to the normal rendering of the map when the user starts actively using the app. */ @Override public void onExitAmbient() { super.onExitAmbient(); mapFragment.onExitAmbient(); } }; } }
Uygulama ortam modundayken ekranı güncelleyebilirsiniz. İçerik güncelleme ve genel olarak ambiyans modu hakkında daha fazla bilgi için Uygulamanızı görünür tutma konulu Android eğitim sınıfına bakın.
Wear OS'te Street View'u kullanma
Street View, giyilebilir cihazlarda tam olarak desteklenir.
Kullanıcıların bir Street View panoramasını görüntülerken uygulamadan çıkmasına izin vermek için uzun tıklama hareketini dinlemek üzere StreetViewPanorama.OnStreetViewPanoramaLongClickListener arayüzünü kullanın. Kullanıcı Street View resminde bir yeri uzun süre tıkladığında bir onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
etkinliği alırsınız. Çıkış düğmesi görüntülemek için DismissOverlayView.show()
tuşuna basın.
Örnek kod
GitHub'ta, uygulamanız için başlangıç noktası olarak kullanabileceğiniz bir örnek uygulama mevcuttur. Örnekte, Wear OS'te temel bir Google Haritası'nın nasıl ayarlanacağı gösterilmektedir.
Wear OS'teki Haritalar API'sinde desteklenen işlevler
Bu bölümde, giyilebilir cihazlardaki haritalarda desteklenen işlevler ile el cihazlarındaki (telefonlar ve tabletler) desteklenen işlevler arasındaki farklar açıklanmaktadır. Aşağıda bahsedilmeyen tüm API özellikleri, API'nin tamamı için belgelendiği şekilde çalışır.
İşlevsellik | |
---|---|
Tam etkileşimli mod ve basit mod | Android için Haritalar SDK'sını tam etkileşimli modda veya basit modda kullanabilirsiniz. Giyilebilir cihazdaki performansı optimize etmek istiyorsanız ve uygulamanızın hareketler veya haritayı kaydırma ve yakınlaştırma gibi etkileşimleri desteklemesi gerekmiyorsa basit modu kullanabilirsiniz. Basit modda, kullanıcı haritaya dokunduğunda Google Haritalar mobil uygulamasını başlatma amacı devre dışıdır ve giyilebilir cihazlarda etkinleştirilemez. Basit mod ile tam etkileşimli mod arasındaki farkların tam listesi için basit mod belgelerine bakın. |
Harita araç çubuğu | Harita araç çubuğu devre dışıdır ve giyilebilir cihazlarda etkinleştirilemez. |
Kullanıcı arayüzü kontrolleri | Kullanıcı arayüzü denetimleri, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Buna yakınlaştırma, pusula ve konumum kontrolleri de dahildir. Bunları, her zamanki gibi UiSettings sınıfını kullanarak etkinleştirebilirsiniz.
|
Hareketler | Tek dokunuşlu jestler beklendiği gibi çalışır. Örneğin, haritayı kaydırmak için dokunup sürükleyin, yakınlaştırmak için iki kez dokunun ve uzaklaştırmak için iki parmağınızla dokunun. Çoklu dokunma hareketleri, kullanıcının cihazına bağlı olarak desteklenir. Çoklu dokunma hareketlerine örnek olarak haritayı eğmek için iki parmağıyla itme, yakınlaştırmak için iki parmak ucunu yakınlaştırma ya da uzaklaştırma ve iki parmağıyla döndürme verilebilir. |
İç mekan haritaları ve binalar |
İç mekan haritaları, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Bunları GoogleMap.setIndoorEnabled(true) arayarak etkinleştirebilirsiniz. Kapalı alan haritaları etkinleştirildiyse haritada varsayılan kat seviyesi gösterilir.
Seviye seçici kullanıcı arayüzü öğesi giyilebilir cihazlarda desteklenmez. |
Yer paylaşımlı karolar | Kart yer paylaşımları, giyilebilir cihazlarda desteklenmez. |
Wear OS'te Maps API ile geliştirmeyle ilgili en iyi uygulamalar
Uygulamanızda en iyi kullanıcı deneyimini nasıl sağlayabilirsiniz?
- Harita, ekranın büyük bir bölümünü kaplamalıdır. Bu, haritanın giyilebilir cihazın küçük form faktöründe kullanılabilirliğini optimize etmek için gereklidir.
- Uygulamanızın kullanıcı deneyimini tasarlarken giyilebilir cihazların pil gücünün düşük olduğunu göz önünde bulundurun. Ekranı etkin ve haritayı görünür durumda tutmak pil performansını etkiler.