Wear OS'te Maps API

Giyilebilir cihazdaki bir harita

Android için Haritalar SDK'sını kullanarak harita tabanlı bir giyilebilir uygulama oluşturabilirsiniz. doğrudan Wear OS by Google cihazlarda çalışan bir uygulamadır. Uygulamanızın kullanıcıları, bileklerine bakarak haritadaki konumlarını görebilir. Ö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.

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önergelerine bakın. ilk giyilebilir uygulama geliştirmek 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ı 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üze 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 kaydırarak kapatma 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 kullanın özelliğini kullanmanızı öneririz.

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 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 veya kamerayı hareket ettirebilirsiniz. İlgili içeriği oluşturmak için kullanılan aşağıdaki örnekte, Sydney Opera Binası'nın yakınında bir işaretçi ekler:

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 cihazlarda ambiyans 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ı basitleştirilmiş, düşük renkli oluşturma olanağı sağlar kullanmak üzere özelleştirebilirsiniz. Daha sonra, harita stili etkileşimli moddan ambiyans moduna geçer. Tüm işaretçiler, nesneler ve kullanıcı arayüzü denetimleri ortam modunda kaybolur. Bu, uygulamanızın güç tüketimini azaltır ve kadranlar gibi diğer ortam uygulamalarıyla tutarlı bir görünüm ve tarz sağlar.

Uygulamanızın haritanın ambiyans modunu kullanmasını sağlamak için aşağıdaki adımları uygulayın:

  1. 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ı güncelleme hakkında bilgi edinmek için SDK paketleri ekleme ile ilgili Android belgelerine bakın.
  2. 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.
  3. Giyilebilir cihaz bağımlılıklarını uygulamanızın build.gradle.kts dosyasına ekleyin. Bkz. örnekleri inceleyin.
  4. 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ılmayı.
  5. 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.
  6. 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 kadrana dönmek yerine ambiyans moduna girer.
  7. AmbientModeSupport.AmbientCallbackProvider arayüzünü Ambiyans modu durum değişikliklerini alabilmesi için etkinlik.
  8. Haritanızı, ambiyans modunu destekleyecek şekilde ayarlayın. Bunu, etkinliğin XML düzen dosyasında map:ambientEnabled="true" özelliğini ayarlayarak veya GoogleMapOptions.ambientEnabled(true) özelliğini 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.
  9. Etkinlik ambiyans moduna geçtiğinde sistem, sağladığınız AmbientCallback içinde onEnterAmbient() yöntemini çağırır. Geçersiz kıl onEnterAmbient() ve çağrı SupportMapFragment.onEnterAmbient(ambientDetails) veya MapView.onEnterAmbient(ambientDetails). API, haritanın etkileşimli olmayan ve düşük renkli oluşturulması.
  10. Benzer şekilde, onExitAmbient() çağrısında SupportMapFragment.onExitAmbient() veya MapView.onExitAmbient(). API, haritanın normal oluşturma moduna geçer.

Aşağıdaki kod örneğinde, etkinlikte ambiyans modu etkinleştirilmektedir:

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 eğitim dersi alı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. Bir 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'da, uygulamanız için başlangıç noktası olarak kullanabileceğiniz bir örnek uygulama mevcuttur. Örnekte, Wear OS'te temel bir Google Haritalar uygulamasının nasıl ayarlanacağı gösterilmektedir.

Wear OS'te 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 kullanabilirsiniz. Şu cihazlarda performansı optimize etmek istiyorsanız basit modu kullanabilirsiniz: Giyilebilir cihazın, uygulamanızın hareketler ya da haritayı kaydırma ve yakınlaştırma gibi etkileşimler.

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ü kontrolleri, 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 dokunma hareketler beklendiği gibi çalışıyor. Ö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ı 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ı, giyilebilir cihazlarda varsayılan olarak devre dışıdır. GoogleMap.setIndoorEnabled(true) numaralı telefonu arayarak bu bildirimleri etkinleştirebilirsiniz. İç mekan haritaları etkinleştirildiğinde, haritada varsayılan kat düzeyi gösterilir. düzeyi seçici kullanıcı arayüzü öğesi, giyilebilir cihazlarda desteklenmiyor.
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 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 kullanıcı deneyimini tespit edebilirsiniz. Ekranı etkin ve haritayı görünür tutmak pil performansını etkiler.