
Android için Haritalar SDK'sını kullanarak doğrudan Wear OS by Google cihazlarda çalışan harita tabanlı giyilebilir bir uygulama oluşturabilirsiniz. Uygulamanızın kullanıcıları, haritadaki konumlarını yalnızca bileklerine göz atarak görebilir. Örneğin, bir güzergâhtaki konumunu çizebilir, ardından ayrıntıları görmek için yakınlaştırabilir veya uygulamanızın sağladığı bilgi penceresini görmek için bir işaretçiye dokunabilirsiniz.
Bu sayfada, Wear cihazlarda kullanılabilen API işlevleri açıklanmakta ve uygulamanızı oluşturmaya başlamanıza yardımcı olmaktadır.
Wear OS'i kullanmaya başlama
Android için Haritalar SDK'sı ile giyilebilir bir uygulama oluşturma, temel olarak diğer Android cihazlar için bir Google Haritalar uygulaması oluşturma ile aynıdır. Aradaki fark, uygulamanın kullanılabilirliğini ve performansını optimize etmek için giyilebilir cihazın daha küçük form faktörüne uygun tasarımınızdır.
Android Studio; proje ayarları, kitaplık ekleme ve paketleme kolaylığı sağlaması nedeniyle Wear OS geliştirme için önerilen araçtır.
Giyilebilir uygulama tasarlamayla ilgili genel yardım için Wear OS tasarım yönergelerine bakın. İlk giyilebilir cihaz uygulamanızı oluşturma konusunda yardım almak için giyilebilir uygulamalar oluşturma rehberine göz atın.
Wear OS'te ilk harita uygulamanızı oluşturma
Bu kısa kılavuzda, Android için Haritalar SDK'sı hakkında bilgi sahibi olduğunuz, uygulamanızda giyilebilir modül oluşturmak için Wear OS kılavuzlarını izlediğiniz ve giyilebilir modüle bir harita eklemek istediğiniz varsayılmaktadır.
Wear modülünüz için bağımlılık ekleme
Aşağıdaki bağımlılıkların, uygulamanızın Wear OS modülünün build.gradle
dosyasına 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:18.1.0' // This dependency is necessary for ambient mode implementation 'androidx.wear:wear:1.2.0' }
Bağımlılıklar hakkında daha fazla bilgi için Mevcut projenize Wear OS modülü ekleme rehberini inceleyin.
Kaydırma ve kapatma hareketini uygulama ve ilk arka plan rengini ayarlama
Haritayı giyilebilir cihazda görüntülemek için SwipeDismissFrameLayout
kullanmanız önerilir. SwipeDismissFrameLayout
sınıfını kullanarak kullanıcılara ekranın sol alt köşesinden kaydırarak uygulamadan çıkma yolu sunan kaydırma-kaydırma hareketini uygulayabilirsiniz.
Özel bir ilk arka plan rengi ayarlamak için, gerçek harita desenleri yüklenene kadar görüntülenecek rengi tanımlamak üzere map:backgroundColor
XML özelliğini kullanın.
SwipeDismissFrameLayout
ve backgroundColor
öğelerini, düzen tanımınıza SupportMapFragment
kapsayıcısı olarak 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, bir geri çağırma ekleyin ve geri çağırmanın davranışını, aşağıda gösterildiği gibi gerekli kapatma işlemini gerçekleştirmek için ayarlayın:
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); } // ... }
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) } // ... }
Harita ekleme
GoogleMap nesnesine bir herkese açık kullanıcı adı almak için onMapReady(GoogleMap)
geri çağırma yöntemini her zamanki gibi kullanın. Harita kullanıma hazır olduğunda geri çağırma tetiklenir. Geri çağırma yönteminde, haritaya işaretçiler veya çoklu çizgiler, dinleyiciler ekleyebilir ya da kamerayı hareket ettirebilirsiniz. Aşağıdaki örnekte, Sidney Opera Binası'nın yakınına bir işaretçi eklenmiştir:
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)); }
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)) }
Ambiyans modu etkinleştiriliyor
Android için Haritalar SDK'sı, giyilebilir uygulamalar için ambiyans modunu destekler. Ambiyans modunu destekleyen uygulamalar bazen her zaman açık olarak adlandırılır. Ambiyans modu, kullanıcı artık uygulamayı aktif olarak kullanmıyorsa etkinleştirilir ve uygulamanın giyilebilir cihazda görünür kalmasına izin verilir.
Android için Haritalar SDK'sı, Ambiyans modunda kullanılmak üzere haritanın basitleştirilmiş, düşük renkli bir şekilde oluşturulmasını sağlar ve cihaz etkileşimli moddan ambiyans moduna geçtiğinde harita stili otomatik olarak ayarlanır. Tüm işaretçiler, nesneler ve kullanıcı arayüzü kontrolleri ambiyans modunda kaybolur. Bu özellik, 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 Ambiyans Modu'nu kullandığından emin olmak için aşağıdaki adımları uygulayın:
- Android SDK'nızı, etkinliklerin ambiyans moduna geçmesine olanak tanıyan API'ları sağlayan Android 6.0 (API 23) veya sonraki bir sürümü içerecek şekilde güncelleyin. SDK'nızı güncelleme hakkında bilgi edinmek için SDK paketleri ekleme konulu 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 bir sürümü hedeflediğinden emin olun. - Giyilebilir bağımlılıkları uygulamanızın
build.gradle
dosyasına ekleyin. Bu sayfadaki örneğe bakın. - Uygulamanızı görünür tutma ile ilgili Android eğitim sınıfında açıklandığı üzere giyilebilir cihaz paylaşılan kitaplık girişini giyilebilir uygulama manifest dosyasına ekleyin.
WAKE_LOCK
iznini Android'de görünür tutma konusunda Android eğitim sınıfında açıklandığı şekilde avuç içi ve giyilebilir uygulama manifestlerine ekleyin.- Etkinliğinizin
onCreate()
yöntemindeAmbientModeSupport.attach()
yöntemini çağırın. Bu şekilde, işletim sistemine uygulamanın her zaman açık olduğu bildirilir. Böylece cihaz kapatıldığında saat yüzüne dönmek yerine ambiyans moduna girmesi gerekir. - Ambiyans modu durum değişikliklerini alabilmek için Etkinliğinizde
AmbientModeSupport.AmbientCallbackProvider
arayüzünü uygulayın. - 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 bir şekilde yapabilirsiniz. Bu ayar, API'ye ambiyans modunda kullanılmak için gerekli harita blokları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()
değerini geçersiz kılın veSupportMapFragment.onEnterAmbient(ambientDetails)
veyaMapView.onEnterAmbient(ambientDetails)
numaralı telefonu arayın. API, etkileşimli olmayan ve düşük renkli bir harita görünümü oluşturur. - Benzer şekilde,
onExitAmbient()
grubundaSupportMapFragment.onExitAmbient()
veyaMapView.onExitAmbient()
numaralı telefonu arayın. API, haritanın normal şekilde oluşturulmasına neden olur.
Aşağıdaki kod örneği, etkinlikte ambiyans modunu etkinleştirir:
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(); } }; } }
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() } } } }
Uygulama Ambiyans modundayken ekranı güncelleyebilirsiniz. İçerik güncelleme ve genel olarak ambiyans modu hakkında daha ayrıntılı bilgi için uygulamanızı görünür tutma ile ilgili Android eğitim sınıfına göz atın.
Wear OS'te Street View'ı kullanma
Street View, giyilebilir cihazlarda tam olarak desteklenir.
Kullanıcıların Street View panoramasını izlerken uygulamadan çıkmasına izin vermek için StreetViewPanorama.OnStreetViewPanoramaLongClickHearer arayüzünü kullanarak uzun tıklama hareketini dinleyin. Bir kullanıcı Street View görüntüsünde 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()
numaralı telefonu arayın.
Örnek kod
GitHub'da örnek bir uygulama mevcuttur. Bu uygulamayı kullanarak başlangıç noktası olarak kullanabilirsiniz. Örnekte, Wear OS'te temel bir Google Haritası'nın nasıl kurulacağı gösterilmektedir.
Wear OS'te Maps API'de desteklenen işlevler
Bu bölümde, taşınabilir cihazlarda (telefonlar ve tabletler) karşılaştırıldığında giyilebilir cihazlardaki haritalar için desteklenen işlevler arasındaki farklılıklar özetlenmektedir. Aşağıda belirtilmeyen tüm API özellikleri tam API için belirtildiği şekilde çalışmalıdır.
İşlevler | |
---|---|
Tamamen etkileşimli mod ve basit mod | Android için Haritalar SDK'sını tamamen etkileşimli modda veya basit modda kullanabilirsiniz. Giyilebilir cihazda performansı optimize etmek istiyorsanız ve uygulamanızın hareketler veya haritayı kaydırıp 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ışı bırakılır ve giyilebilir bir cihazda etkinleştirilemez. Basit mod ile tamamen etkileşimli mod arasındaki farkların tam listesi için Basit mod dokümanlarına 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ü kontrolleri, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Buna yakınlaştırma, pusula ve konum denetimlerim dahildir. Bu reklamları her zamanki gibi UiSettings sınıfını kullanarak etkinleştirebilirsiniz.
|
Hareketler | Tek dokunuşla hareketler beklendiği gibi çalışır. Haritayı kaydırmak için dokunup sürükleyebilir, yakınlaştırmak için iki kez dokunup uzaklaştırmak için iki parmağınızla dokunabilirsiniz. Destek, kullanıcının cihazına bağlı olarak çoklu dokunma hareketleri için farklılık gösterir. Çoklu dokunma hareketlerine örnek olarak haritayı eğmek için iki parmakla basma, yakınlaştırmak için sıkıştırma ve iki parmakla döndürme yer alır. |
İç mekan haritaları ve binaları |
İç mekan haritaları, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Bunları GoogleMap.setIndoorEnabled(true) numaralı telefonu arayarak etkinleştirebilirsiniz. İç mekan haritaları etkinse harita, varsayılan kat düzeyini gösterir.
Seviye seçici kullanıcı arayüzü öğesi, giyilebilir cihazlarda desteklenmiyor. |
Karo yer paylaşımları | Giyilebilir cihazlarda parça yer paylaşımları desteklenmez. |
Wear OS'te Maps API ile uygulama geliştirmeyle ilgili en iyi uygulamalar
Uygulamanızda en iyi kullanıcı deneyimini sağlama:
- Harita ekranın büyük bir kısmını kaplamalıdır. Bu işlem, giyilebilir bir cihazın küçük form faktöründeki haritanın kullanılabilirliğini optimize etmek için gereklidir.
- Uygulamanızın kullanıcı deneyimini tasarlarken giyilebilir bir cihazın düşük pil gücüne sahip olduğunu unutmayın. Ekranı etkin ve haritayı görünür durumda tutmak, pil performansını etkiler.