Android için Haritalar SDK'sını kullanarak harita tabanlı bir giyilebilir uygulama oluşturabilirsiniz. doğrudan Wear OS by Google cihazlarında çalışan bir uygulamadır. Uygulamanızın kullanıcıları yalnızca bileklerine bakarak konumunu görebiliyor. Örneğin, konumlarını bir rota üzerinde gösterebilir, ardından ayrıntıları görmek 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şlevi açıklanmaktadır uygulamanızı geliştirmeye başlamanıza yardımcı olur.
Wear OS'i kullanmaya başlama
Android için Haritalar SDK'sı ile giyilebilir bir uygulama oluşturmak başka herhangi bir Android cihaz için Google Haritalar uygulaması oluşturmakla aynı şekilde. Fark daha küçük form faktörüne yönelik tasarımınızda yer alıyor. Uygulamanın kullanılabilirliğini ve performansını optimize etmek.
Android Studio, Wear OS geliştirme için önerilen araçtır. ve paketleme kolaylığı sağlar.
Giyilebilir cihaz uygulaması tasarlamayla ilgili genel yardım için Wear OS tasarım yönergeleri. ilk giyilebilir uygulama geliştirmek için giyilebilir uygulama oluşturma kılavuzuna bakın.
Wear OS'te ilk harita uygulamanızı oluşturma
Bu hızlı kılavuzda, Android için Haritalar SDK'sı hakkında bilgi sahibi olduğunuz varsayılmaktadır. Wear OS kılavuzlarını izlediğinizden emin olun. şimdi de giyilebilir cihaz modülüne harita eklemek istediğinizi düşünelim.
Wear modülünüz için bağımlılık ekleme
build.gradle.kts
dosyasına aşağıdaki bağımlılıkların eklendiğinden emin olun.
uygulamanızın Wear OS modülünün
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 hızlıca kaydırma hareketi uygulama ve başlangıç arka plan rengini ayarlama
Haritayı giyilebilir cihazda görüntülemek için SwipeDismissFrameLayout
kullanmanız önerilir. SwipeDismissFrameLayout
sınıfını kullanarak şunları yapabilirsiniz:
devre dışı bırakmak için kaydırma hareketini uygulayarak kullanıcılara
ekranın en sol kenarından hızlıca kaydırarak uygulamadan çıkabilirsiniz.
Özel bir ilk arka plan rengi ayarlamak için map:backgroundColor
XML özelliğini kullanarak gerçek harita karoları yüklenene kadar gösterilecek rengi tanımlayın.
Düzeninize SwipeDismissFrameLayout
ve backgroundColor
öğelerini ekleyin
SupportMapFragment
öğesinin kapsayıcısıdır:
<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 elde ettiğinizde
geri çağırma işlevini kullanın ve gerekli kapatma işlemini gerçekleştirmek için geri çağırma davranışını
aşağıdaki gibi işlem yapı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, 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 uygulamalar için ortam modunu destekler. Ambiyans modunu destekleyen uygulamalar bazen her zaman açık uygulamalar olarak da adlandırılır. 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ı, ambiyans modunda kullanılmak üzere haritanın basitleştirilmiş, düşük renkli bir görüntüsünü sağlar. 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ü kontroller ambiyans modunda kaybolur. Bu da evinizin güç tüketimini azaltır Bu, Android ve iOS cihazlar gibi diğer ortam uygulamalarıyla tutarlı bir görünüm kadranlar.
Uygulamanızın, haritanın ambiyans modunu kullanmasını sağlamak için aşağıdaki adımları uygulayın:
- Android SDK'nızı, Android 6.0 (API 23) veya sonraki bir sürümü içerecek şekilde güncelleme platformu, etkinlikleri ortama aktarmaya olanak tanıyan API'ler sağlıyor yatırım yapmanız önemlidir. SDK'nızı nasıl güncelleyeceğiniz hakkında bilgi edinmek için Android dokümanlarına bakın SDK paketleri ekleme hakkında daha fazla bilgi edinin.
- Uygulama manifest dosyasında
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. Bkz. örnekleri inceleyin. - Giyilebilir cihaz paylaşılan kitaplık girişini giyilebilir cihaz uygulama manifest'ine aşağıdaki gibi ekleyin: Android eğitim dersinde uygulamanızı görünür kılmaya.
- 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önteminde şunu çağırın:AmbientModeSupport.attach()
yöntemini kullanabilirsiniz. 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 etkinliğinizde
AmbientModeSupport.AmbientCallbackProvider
arayüzünü uygulayın. - Haritanızı, ambiyans modunu destekleyecek şekilde ayarlayın. Bunu, Search Ads 360'taki
XML düzen dosyasında
map:ambientEnabled="true"
özelliğini kullanın veya bu özelliğiGoogleMapOptions.ambientEnabled(true)
ayarlayarak programatik olarak yapabilirsiniz. Bu ayar, API'ye etkinlik için gerekli harita karolarını önceden yüklemesi gerektiğini bildirir. ambiyans modunda kullanın. - Etkinlik ambiyans moduna geçtiğinde sistem
onEnterAmbient()
yöntemini kullanarakAmbientCallback
sağlar. Geçersiz kılonEnterAmbient()
ve çağrıSupportMapFragment.onEnterAmbient(ambientDetails)
veyaMapView.onEnterAmbient(ambientDetails)
. API, haritanın etkileşimli olmayan ve düşük renkli bir oluşturma işlemine geçer. - Benzer şekilde,
onExitAmbient()
çağrısındaSupportMapFragment.onExitAmbient()
veyaMapView.onExitAmbient()
. API, haritanın normal oluşturma moduna 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 ambiyans modundayken ekranı güncelleyebilirsiniz. Ayrıntılı bilgi için genel olarak ambiyans moduyla ilgili daha fazla bilgi edinmek için Android uygulamanızı görünür tutmayla ilgili bir eğitim kursuna göz atın.
Street View'ı Wear OS'te 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ı bir yeri uzun tıkladığında
tıkladığınızda, açıklamada bir
onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)
etkinliği. Telefonla arama
Çıkış düğmesini görüntülemek için DismissOverlayView.show()
.
Örnek kod
GitHub'da bulabileceğiniz örnek uygulamamızı başlangıç noktası olduğunu unutmayın. Örnekte, kampanyalarınızı nasıl yapılandıracağınızı Wear OS'te temel bir Google Haritası.
Wear OS'teki Maps API'de desteklenen işlevler
Bu bölümde, giyilebilir cihazlardaki haritalarda desteklenen işlevler ile avuç içi cihazlardaki (telefonlar ve tabletler) desteklenen işlevler arasındaki farklar açıklanmaktadır. Aşağıda belirtilmeyen tüm API özellikleri, tam API için belgelendiği gibi çalışmalıdır.
İşlevsellik | |
---|---|
Tamamen etkileşimli mod ve basit mod | Android için Haritalar SDK'sını tam etkileşimli modda veya basit modda çalışır. Şu cihazlarda performansı optimize etmek istiyorsanız basit modu kullanabilirsiniz: ve uygulamanızın, mobil cihazlarda Hareketler veya haritayı kaydırma ve yakınlaştırma gibi etkileşimler. Basit modda, etkinleştirildiğinde Google Haritalar mobil uygulamasını Kullanıcı haritaya dokunduğunda devre dışı ve şurada etkinleştirilemez: giyilebilir bir cihaz. 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ü
kontroller, giyilebilir cihazlarda varsayılan olarak devre dışıdır. Buna yakınlaştırma, pusula ve konumum kontrolleri de dahildir. Bunları şurada etkinleştirebilirsiniz:
UiSettings
devam etmektir.
|
Hareketler | Tek dokunma hareketler beklendiği gibi çalışıyor. Örnek olarak şunlar verilebilir: haritayı kaydırmak için dokunup sürükleme, iki kez dokunma yakınlaştırmak için, 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ı yatırmak için iki parmakla itme, iki parmakla itme, iki parmak ucunuzu yakınlaştırın ya da uzaklaştırın. |
İç mekan haritaları ve binaları |
İç mekan haritaları
varsayılan olarak devre dışı olmasıdır. GoogleMap.setIndoorEnabled(true) numaralı telefonu arayarak bu bildirimleri etkinleştirebilirsiniz. Kapalı alan haritaları etkinleştirildiyse harita, varsayılan kat düzeyini gösterir.
Seviye seçici kullanıcı arayüzü öğesi giyilebilir cihazlarda desteklenmez. |
Yer paylaşımlı karo | Kart yer paylaşımları, giyilebilir cihazlarda desteklenmez. |
Wear OS'te Maps API ile uygulama geliştirmeyle ilgili en iyi uygulamalar
Uygulamanızda en iyi kullanıcı deneyimini nasıl sağlayabilirsiniz?
- Harita, ekranın büyük bir kısmı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 kullanıcı deneyimini tespit edebilirsiniz. Ekranı etkin durumda tutmak ve Haritanın görünür olması pil performansını etkiler.