Android için Haritalar SDK'sını kullanarak doğrudan Wear OS by Google cihazlarında çalışan harita tabanlı bir giyilebilir cihaz uygulaması oluşturabilirsiniz. Uygulamanızın kullanıcıları, bileklerine bakarak konumlarını haritada görebilir. Örneğin, bir rota üzerindeki konumlarını işaretleyebilir, ardından ayrıntılar için yakınlaştırabilir veya uygulamanız tarafından sağlanan bir bilgi penceresini görmek için bir işaretçiye dokunabilirler.
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'te kullanmaya başlama
Android için Haritalar SDK'sı ile giyilebilir cihaz uygulaması oluşturmak, temelde diğer Android cihazlar için Google Haritalar uygulaması oluşturmakla 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ızda yatar.
Android Studio, proje kurulumu, kitaplık ekleme ve paketleme kolaylıkları sağladığı için Wear OS geliştirmesi için önerilen araçtır.
Giyilebilir cihaz uygulaması tasarlama konusunda genel yardım için Wear OS tasarım kurallarına bakın. İlk giyilebilir cihaz uygulamanızı oluşturma konusunda yardım almak için Giyilebilir cihaz uygulamaları oluşturma rehberine bakın.
Wear OS'te ilk harita uygulamanızı oluşturma
Bu hızlı kılavuzda, Android için Haritalar SDK'sını bildiğiniz, uygulamanızda giyilebilir cihaz modülü oluşturmak için Wear OS kılavuzlarını uyguladığınız ve artık giyilebilir cihaz modülüne harita eklemek istediğiniz varsayılmaktadır.
Wear modülünüze bağımlılık ekleme
Uygulamanızın Wear OS modülünün build.gradle.kts
dosyasında aşağıdaki bağımlılıkların bulunduğundan 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 kılavuzuna bakın.
Kapatmak için kaydırma hareketini uygulama ve ilk arka plan rengini ayarlama
Haritayı giyilebilir cihazda göstermek için SwipeDismissFrameLayout
kullanmanız önerilir. SwipeDismissFrameLayout
sınıfını kullanarak kaydırarak kapatma hareketini uygulayabilir ve kullanıcılara ekranın en sol kenarından kaydırarak uygulamadan çıkma olanağı sunabilirsiniz.
Özel bir başlangıç arka plan rengi ayarlamak için map:backgroundColor
XML özelliğini kullanarak gerçek harita döşemeleri yüklenene kadar gösterilecek 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>
Etkinliğinizde SwipeDismissFrameLayout
nesnesini aldığınızda geri çağırma ekleyin ve geri çağırmanın davranışını, aşağıda gösterildiği gibi gerekli kapatma işlemini gerçekleştirecek şekilde ayarlayın:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback, AmbientModeSupport.AmbientCallbackProvider { public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 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 tutamacını almak için onMapReady(GoogleMap)
geri çağırma yöntemini her zamanki gibi kullanın. Geri çağırma, harita kullanıma hazır olduğunda tetiklenir. Geri çağırma yönteminde haritaya işaretçiler veya çoklu çizgiler ekleyebilir, dinleyiciler ekleyebilir ya da kamerayı hareket ettirebilirsiniz. Aşağıdaki örnekte, Sidney Opera Binası'nın yakınına bir işaretçi eklenmektedir:
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 cihaz uygulamalarında ortam modunu destekler. Ortam modunu destekleyen uygulamalara bazen her zaman açık uygulamalar adı verilir. Ambiyans modu, kullanıcı uygulamayı etkin olarak kullanmayı bıraktığında etkinleştirilir ve uygulamanın giyilebilir cihazda görünür kalmasına olanak tanır.
Android için Haritalar SDK'sı, ortam modunda kullanılmak üzere haritanın basitleştirilmiş ve az renkli bir görünümünü sağlar. Cihaz, etkileşimli moddan ortam moduna geçtiğinde harita stili otomatik olarak ayarlanır. Ortam modunda tüm işaretçiler, nesneler ve kullanıcı arayüzü kontrolleri kaybolur. Bu, uygulamanızın güç tüketimini azaltır ve saat yüzleri gibi diğer ortam uygulamalarıyla tutarlı bir görünüm ve tarz sağlar.
Uygulamanızın haritanın ortam modunu kullandığından emin olmak için aşağıdaki adımları uygulayın:
- Android SDK'nızı, etkinliklerin ortam moduna geçmesine olanak tanıyan API'leri sağlayan Android 6.0 (API 23) veya sonraki platformları içerecek şekilde güncelleyin. SDK'nızı güncelleme hakkında bilgi edinmek için Android dokümanlarındaki SDK paketleri ekleme başlıklı makaleyi inceleyin.
- 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ını uygulamanızın
build.gradle.kts
dosyasına ekleyin. Bu sayfadaki örneği inceleyin. - Giyilebilir cihaz uygulamasının manifest dosyasına, Uygulamanızı görünür tutma başlıklı Android eğitim sınıfında açıklandığı gibi giyilebilir cihaz paylaşılan kitaplık girişini ekleyin.
WAKE_LOCK
iznini, Android eğitim sınıfında uygulamanızı görünür tutma konusunda açıklandığı gibi elde taşınabilir cihaz ve giyilebilir cihaz uygulama manifestlerine ekleyin.- Etkinliğinizin
onCreate()
yönteminde,AmbientModeSupport.attach()
yöntemini çağırın. Bu, işletim sistemine uygulamanın her zaman açık olduğunu bildirir. Böylece cihaz kapandığında saat yüzüne dönmek yerine ortam moduna girer. - Etkinliğinizde
AmbientModeSupport.AmbientCallbackProvider
arayüzünü uygulayın. Böylece, ambiyans modu durum değişikliklerini alabilir. - Haritanızı ambiyans modunu destekleyecek şekilde ayarlayın. Bunu, etkinliğin XML düzen dosyasında
map:ambientEnabled="true"
özelliğini ayarlayarak veyaGoogleMapOptions.ambientEnabled(true)
özelliğini ayarlayarak programatik olarak yapabilirsiniz. Bu ayar, API'ye ortam modunda kullanılacak gerekli harita döşemelerini ö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()
'ı geçersiz kılın veSupportMapFragment.onEnterAmbient(ambientDetails)
veyaMapView.onEnterAmbient(ambientDetails)
'i arayın. API, haritanın etkileşimli olmayan ve az renkli bir şekilde oluşturulmasına geçer. - Benzer şekilde,
onExitAmbient()
görüşmesindeSupportMapFragment.onExitAmbient()
veyaMapView.onExitAmbient()
'ı arayın. API, haritanın normal oluşturulmasına geçer.
Aşağıdaki kod örneği, etkinlikte ortam modunu etkinleştirir:
Kotlin
class AmbientActivity : AppCompatActivity(), AmbientModeSupport.AmbientCallbackProvider { private lateinit var mapFragment: SupportMapFragment public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 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 ambiyans modundayken ekranı güncelleyebilirsiniz. İçerik güncelleme ve genel olarak ortam modu hakkında daha fazla bilgi için Android eğitim sınıfındaki Uygulamanızı görünür tutma başlıklı makaleyi inceleyin.
Wear OS'te Street View'u kullanma
Street View, giyilebilir cihazlarda tam olarak desteklenir.
Kullanıcıların Street View panoraması 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 görüntüsünde bir yeri uzun tıkladığında onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
etkinliği alırsınız. Çıkış düğmesini göstermek için Call
DismissOverlayView.show()
işlevini kullanın.
Örnek kod
Uygulamanız için başlangıç noktası olarak kullanabileceğiniz örnek bir uygulama GitHub'da mevcuttur. Bu örnek, Wear OS'te temel bir Google Haritası'nı nasıl ayarlayacağınızı gösterir.
Wear OS'te Maps API'de desteklenen işlevler
Bu bölümde, giyilebilir cihazlardaki haritaların desteklenen işlevleri ile elde taşınabilir cihazlardaki (telefonlar ve tabletler) haritaların desteklenen işlevleri arasındaki farklar özetlenmektedir. Aşağıda belirtilmeyen tüm API özellikleri, tam API için belgelendiği şekilde çalışmalıdır.
İşlev | |
---|---|
Tam etkileşimli mod ve basit mod | Android için Haritalar SDK'sını tam etkileşimli modda veya basit modda kullanabilirsiniz. Giyilebilir cihazda performansı optimize etmek istiyorsanız ve uygulamanızın hareketler ya da haritayı kaydırma ve yakınlaştırma gibi etkileşimleri desteklemesi gerekmiyorsa lite modunu kullanabilirsiniz. Basit modda, kullanıcı haritaya dokunduğunda Google Haritalar mobil uygulamasını başlatma amacı devre dışıdır ve giyilebilir cihazda 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 cihazda etkinleştirilemez. |
Kullanıcı arayüzü kontrolleri | Kullanıcı arayüzü kontrolleri, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Yakınlaştırma, pusula ve konumum kontrolleri bu kapsamdadır. Bu özellikleri her zamanki gibi UiSettings sınıfını kullanarak etkinleştirebilirsiniz.
|
Hareketler | Tek dokunma hareketleri beklendiği gibi çalışıyor. Örneğin, haritayı kaydırmak için dokunup sürükleme, yakınlaştırmak için iki kez dokunma ve uzaklaştırmak için iki parmakla dokunma hareketleri kullanılabilir. Çoklu dokunma hareketleri için destek, kullanıcının cihazına göre değişir. Çoklu dokunma hareketlerine örnek olarak haritayı eğmek için iki parmakla itme, yakınlaştırmak için sıkıştırma ve iki parmakla döndürme verilebilir. |
İç mekan haritaları ve binalar |
İç mekan haritaları, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Bu bildirimleri GoogleMap.setIndoorEnabled(true) numarasını arayarak etkinleştirebilirsiniz. Kapalı alan haritaları etkinse haritada varsayılan kat seviyesi gösterilir.
Seviye
seçici kullanıcı arayüzü öğesi, giyilebilir cihazlarda desteklenmez. |
Yer paylaşımlı bloklar | Kutu yer paylaşımları, giyilebilir cihazlarda desteklenmez. |
Wear OS'te Maps API ile geliştirme yapmayla ilgili en iyi uygulamalar
Uygulamanızda en iyi kullanıcı deneyimini sunma:
- Harita, ekranın büyük bir bölümünü kaplamalıdır. Bu, haritanın giyilebilir cihazları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ın etkin tutulması ve haritanın görünür olması pil performansını etkiler.